Selenium - NoSuchElementException после переключения с кадра [0] на окно [1] - Ошибка Firefox GeckoDriver - Python

Я получаю сообщение об ошибке element not found в браузере Firefox GeckoDriver

когда я переключаюсь с окна [1] на фрейм [0], обратно в окно [1], а затем нажимаю кнопку закрытия фрейма.

Я хочу продолжать использовать GeckoDriver, потому что у меня были проблемы с производительностью с ChromeDriver. Извините, это внутренний веб-сайт, и я не могу поделиться HTML.

  1. I have done the following to pinpoint the issue.
    • Tested with exact same code and works properly in Chrome driver
    • Работает в Firefox, когда я переключаюсь в окно [1], нажимаю кнопку openframe, а затем нажимаю кнопку closeframe, не переключаясь на фрейм [0].
    • Я могу переключиться на фрейм [0], переключиться обратно в окно [1] и сделать driver.close(), и оно закроет окно [1].
    • Я могу прочитать driver.page_source из окна [1] после переключения обратно с кадра [0] и увидеть, что элемент все еще находится в page_source и не изменился.
    • Я могу переключиться из кадра [0] обратно в окно [0] и щелкнуть кнопку, чтобы снова открыть окно [1], и это работает правильно. Затем я могу щелкнуть кнопки открытия и закрытия фрейма.

Таким образом, проблема заключается в переключении из кадра [0] обратно в окно [1], а затем при попытке щелкнуть элемент в окне [1] в Firefox GeckoDriver.

Python: 2.7
Selenium: 3.0.1
GeckoDriver: v0.13.0
Firefox: 51.0.1

Вот код:

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: сообщение: невозможно найти элемент: [id = "closeframe"]


person cordaco    schedule 03.02.2017    source источник
comment
Вы используете индексы для переключения, уверены ли вы, что ваши индексы верны после открытия / закрытия фреймов? Попробуйте переключаться по именам фреймов и mainWindow.   -  person Moshisho    schedule 04.02.2017


Ответы (1)


Код ниже, похоже, помог. Все еще не уверен, почему.

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()
person cordaco    schedule 07.02.2017