파이썬 + + 유닛 테스트는 셀레늄 테스트 케이스를 작성하는 하이퍼 링크를 클릭

테스트 기능 : 이전 메뉴로의 링크를 클릭하고 보조 메뉴가 홈 공원 블로그 사이트 분류를 연결합니다.

문제가 발생 :

  보조 메뉴가 이전 메뉴 페이지 새로 고침 따라 처음 두 메뉴를 클릭하고 동일한 서브 메뉴 레벨에 따라 제 2 이차 메뉴를 배치 할 때 1 사이클을 클릭

오류가 발생합니다 : 두 번째 보조 메뉴, 할당 위치를 변경하는 메뉴에 대한 다음의 필요성을 찾을 수 없습니다;

  2.하면 페이지의 가시 영역 않고 메뉴 수준에서 너무 많은 보조 메뉴가, 그때는 오류가 발생하지 : 요소가없는 상호 작용 가능한, 다음 스크롤 막대를 밀어해야합니다.

 

#의 부호화 = UTF-8 
에서 셀레늄 수입 webdriver의
 반입 유닛 테스트
 에서 selenium.webdriver의 수입 ActionChains
 에서 selenium.common.exceptions가 가져 는 NoSuchElementException을


클래스 Testcnbloglink (unittest.TestCase) :
    @classmethod
    DEF setUpClass (CLS) :
         '' ' 초기화 브라우저 드라이버와 접속 주소 ' '' 
        cls.driver = webdriver.Chrome ()
        cls.base_url = ' https://www.cnblogs.com/ '
        cls.driver.get (cls.base_url)
        cls.driver.maximize_window ()   #은 전체 화면으로 브라우저를 설정

    DEF의 test_1clickcateitem (셀프) :
         '' ' 링크를 테스트 메뉴를 클릭 ' '' 
        은 try :
            cate_parentid = ' // * / 리 [ID = "cate_item"@] '   # 메뉴 요소 모두 
            에 대한 I  범위 (1, 30). :   # 순환 메뉴 요소 첨자 
                cate_id = cate_parentid + ' [ ' + STR (I) + ' ] '   # 메뉴 소자 수득 
                #의 주기마다 메뉴를 클릭하여 
                메뉴 = self.driver.find_element_by_xpath (cate_id)를
                menu.click ()
                메뉴 = self.driver.find_element_by_xpath (cate_id)   # 메뉴를 클릭 한 후, 페이지를 새로 고침, 당신은 할당을 다시 할 필요가 
                #의 주장을 판단 점프 링크는 올바른 
                IF menu.get_attribute ( ' 위에서 ID를 언급 ' ) [10 :] == ' 0 ' :
                    self.assertEqual (self.driver.current_url, ' https://www.cnblogs.com/cate/all/ ' )
                 ELIF의 menu.get_attribute ( " ID " ) [10] == ' -1 ' :
                    self.assertEqual (self.driver.current_url, ' https://www.cnblogs.com/comment/ ' )
                 다른 사람 :
                    self.assertEqual (self.driver.current_url, ' https://www.cnblogs.com/cate/ ' + 
                                     menu.get_attribute ( " ID " ) [10 :] + ' / ' )
         제외하고 는 NoSuchElementException :
             인쇄 ( " 발견되지 메뉴, 완료를 클릭합니다 메뉴 ' )

    DEF의 test_2clickcatecontent (자체) :
         '' ' 두 번째 수준 메뉴를 클릭하고 ' '' 
        은 try :
            cate_parentid = ' //'* @ ID = "cate_item"] / 리 '   # 모든 요소의 메뉴 
             I  범위 (1, 30. )
                cate_id = cate_parentid + ' [ ' + STR (I) + ' ] '  = self.driver.find_element_by_xpath (cate_id)   # 메뉴 소자 
                AID = above.get_attribute ( " ID " ) [10]    # 메뉴 의 id 값 
                은 try :
                    cate_content_parentid = ' //'* @ ID = "cate_content_block_ ' + + AID ' "] "   # 모든 요소의 부 메뉴에 
                    대한 F  범위 (1, 30. ) :
                         #가 메뉴 마우스 
                        (self.driver)를 ActionChains .move_to_element 위 .perform ()
                        cate_content_id = cate_content_parentid + ' / DIV [2] ' + ' / UL ' + ' / 리 [ ' + STR (F) + ' ] ' + ' / A '   # 두 메뉴 소자 
                        메뉴 2 = self.driver.find_element_by_xpath (cate_content_id)
                         #의 상단에 도시 된 표시 영역 --scrollIntoView ()에 드래그 요소가 탐색 위치 가려하고 주어지지 될 수 있고, 인출되어 
                        #가 scrollIntoView은 (거짓) 일으킴 바닥 가시 영역을 정렬 
                        IF F == 17. :
                            self.driver.execute_script ( " (가) [0]) (거짓 .scrollIntoView 인수; " , 메뉴 2)
                         #의 루프가 보조 메뉴를 클릭 
                        menu2.click ()
                         #을 보조 메뉴를 클릭 한 후, 페이지를 새로 고침, 사용자가 메뉴에 할당을 다시해야하는, 그렇지 않으면, 하나 개의 메뉴 수준에서 다른 보조 메뉴 
                        = 위 self.driver.find_element_by_xpath (cate_id)
                 제외 예외 : NoSuchElementException :
                     인쇄 ( ' 찾을 수 없음 보조 메뉴는 종료 보조 메뉴를 클릭하지 ' )
         제외 : 예외 : NoSuchElementException
             인쇄 ( ' 나는 완전한 메뉴 마우스 오버 메뉴를 찾을 수 없습니다 ' )

    @classmethod
    데프 tearDownClass (CLS) :
        cls.driver.quit ()

 

추천

출처www.cnblogs.com/lengjf/p/11704717.html