테스트 기능 : 이전 메뉴로의 링크를 클릭하고 보조 메뉴가 홈 공원 블로그 사이트 분류를 연결합니다.
문제가 발생 :
보조 메뉴가 이전 메뉴 페이지 새로 고침 따라 처음 두 메뉴를 클릭하고 동일한 서브 메뉴 레벨에 따라 제 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 ()