1

を私は、Firefox GeckoDriverブラウザ
セレン - FirefoxのGeckoDriverエラー - - はNoSuchElementExceptionウィンドウにフレーム[0]から[1]切り替え後のPython

iはウィンドウの切り替えのエラー、element not foundを受けている[1]〜フレーム[0]、ウィンドウ[1]に戻り、閉じるフレームボタンをクリックします。

私はChromeDriverでパフォーマンスの問題が発生していたので、GeckoDriverを使い続けたいと思います。申し訳ありません、これは内部のウェブサイトであり、HTMLを共有することはできません。

  1. 私は問題を特定するために以下を行っています。
    • はまったく同じコードでテストされ、Firefoxで
    • ワークスiはウィンドウに切り替えクロムドライバで正常に動作[1]​​ボタンをクリックして、[0]フレームに切り替えることなく、closeframeボタンをクリックしてください。
    • フレーム[0]に切り替え、ウィンドウ[1]に戻ってdriver.close()を実行するとウィンドウ[1]が閉じます。
    • フレーム[0]からスイッチバックした後にウィンドウ[1]からdriver.page_sourceを読み取って、その要素がまだpage_sourceにあり、変更されていないことを確認できます。
    • フレーム[0]からウィンドウ[0]に切り替えてボタンをクリックすると、ウィンドウ[1]を再度開くことができ、正しく動作します。それから私は開いていると閉じるフレームボタンをクリックすることができます。

だから、問題はちょうどフレームからの切り替えに常駐する[0]バックウィンドウに[1]、その後、ウィンドウ内の要素をクリックしようとしている[1] FirefoxのGeckoDriverインチ

のPython:2.7
セレン:3.0.1
GeckoDriver:v0.13.0
のFirefox:

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

切り替えにインデックスを使用していますが、フレームを開いたり閉じたりした後にインデックスが正しいことを確認してください。フレーム名とメインウィンドウで切り替えてみてください。 – 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()