2017-02-03 10 views
1

를 I 파이어 폭스 GeckoDriver 브라우저
셀레늄 - 파이어 폭스 GeckoDriver 오류 - - NoSuchElementException이 창 프레임 [0]로부터 [1] 켠 파이썬

난 창 전환로 에러 element not found 수신이 [1] 프레임 [0], 창 [1]로 돌아가서 프레임 닫기 버튼을 클릭합니다.

GeckoDriver을 사용하고 싶습니다. ChromeDriver의 성능 문제가 있었기 때문에 계속 사용하고 싶습니다. 죄송합니다. 내부 웹 사이트이므로 HTML을 공유 할 수 없습니다.

  1. 문제를 정확히 지적하기 위해 다음을 수행했습니다.
    • 는 동일한 코드로 테스트 크롬 드라이버 파이어 폭스
    • 서지 제가 [1] openframe 버튼을 클릭하고, [0]이 프레임에 스위칭없이 closeframe 버튼을 클릭하여 창으로 전환 적절히 작동한다.
    • 프레임 [0]으로 전환하고 창 [1]로 돌아가 driver.close()을 실행하면 창 [1]이 닫힙니다.
    • 프레임 [0]에서 전환 한 후 창 [1]에서 driver.page_source을 읽을 수 있으며 요소가 여전히 page_source에 있으며 변경되지 않았 음을 확인하십시오.
    • 다시 프레임 [0]에서 창 [0]으로 전환하고 버튼 [1]을 다시 열면 제대로 작동합니다. 그런 다음 열기 및 닫기 프레임 단추를 클릭 할 수 있습니다.

그래서 문제는 프레임으로부터 [0] 다시 윈도우 [1], 파이어 폭스 GeckoDriver 창에 [1]의 요소를 누르려고 스위칭에 상주.

파이썬 : 2.7
셀레늄 : 3.0.1
GeckoDriver : v0.13.0
파이어 폭스 :

firefox_capabilities = DesiredCapabilities.FIREFOX 
firefox_capabilities['marionette'] = True 
driver = webdriver.Firefox(capabilities=firefox_capabilities) 
driver.get('www.internalwebsite.com') 
driver.find_element_by_id('opensnewwindow').click() 
driver.switch_to_window(driver.window_handles[1]) 
driver.find_element_by_id('opennewframe').click() 
driver.switch_to_frame(0) 
//read contents 
driver.switch_to_window(driver.window_handles[1]) 
driver.find_element_by_id('closeframe').click() 

오류 :

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="closeframe"]

여기

51.0.1 코드입니다

+0

전환을 위해 색인을 사용하고 있습니다. 프레임을 열거 나 닫은 후에 색인이 올바른지 확인하십시오. 프레임 이름과 mainWindow로 전환 해보십시오. – Moshisho

답변

0

아래 코드는 그 트릭을 수행 한 것 같습니다. 아직도 확실하지 않은 이유.

driver.switch_to.default_content() 

firefox_capabilities = DesiredCapabilities.FIREFOX 
firefox_capabilities['marionette'] = True 
driver = webdriver.Firefox(capabilities=firefox_capabilities) 
driver.get('www.internalwebsite.com') 
driver.find_element_by_id('opensnewwindow').click() 
driver.switch_to_window(driver.window_handles[1]) 
driver.find_element_by_id('opennewframe').click() 
driver.switch_to_frame(0) 
//read contents 
driver.switch_to.default_content() 
driver.switch_to_window(driver.window_handles[1]) 
driver.find_element_by_id('closeframe').click()