Selenium中不再存在DOM之后切换回父框架

时间:2018-07-04 13:51:03

标签: python selenium selenium-webdriver iframe webdriver

我有以下页面

<body>
  <iframe id="outer_frame">
    <iframe id="search_button_frame">
      <button id="search_button"></button>
    </iframe>
  </iframe>
</body>

现在,当我单击search_button之后,两个frames outer_framesearch_button_frame不再在DOM中,而是页面变成了这样

<body>
  <iframe id="form_frame">
    ...
  </iframe>
</body>

我正在尝试转到search_button,然后跳出框架进入主页,然后使用以下方法切换到form_frame

outer_frame = browser.find_element_by_xpath('//*[@id="outer_frame"]')
browser.switch_to.frame(outer_frame)

search_button_frame = browser.find_element_by_xpath('//*[@id="search_button_frame"]')
browser.switch_to.frame(search_button_frame)

search_button = browser.find_element_by_xpath('//*[@id="search_button"]')
search_button.click()

browser.switch_to_default_content()

form_frame = browser.find_element_by_xpath('//*[@id="form_frame"]')
browser.switch_to.frame(form_frame)

但我不断收到以下错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Una
ble to locate element: {"method":"xpath","selector":"//*[@id="form_frame"]"}

这是否意味着我不在正确的框架中?

2 个答案:

答案 0 :(得分:2)

根据您的问题和DOM Tree结构后的情况,点击search_button,您需要先切换default_content(),然后再切换到下一个{<1}}使用 WebDriverWait 如下:

<iframe>

您可以在以下位置找到详细的讨论:

答案 1 :(得分:1)

按照标准过程:首先,保存浏览器的父句柄。 字符串句柄= driver.getwindowhandle();

然后尝试通过等待切换到一个框架,以便驱动程序可以等待一段时间(如果DOM中现在不存在驱动程序)。 在框架上完成工作之后,然后再次切换到parentWindow(默认窗口)。 相同的过程可以应用于始终可以完美工作的每个帧。