我有以下页面
<body>
<iframe id="outer_frame">
<iframe id="search_button_frame">
<button id="search_button"></button>
</iframe>
</iframe>
</body>
现在,当我单击search_button
之后,两个frames outer_frame
和search_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"]"}
这是否意味着我不在正确的框架中?
答案 0 :(得分:2)
根据您的问题和DOM Tree结构后的情况,点击search_button
,您需要先切换到default_content()
,然后再切换到下一个{<1}}使用 WebDriverWait 如下:
<iframe>
您可以在以下位置找到详细的讨论:
答案 1 :(得分:1)
按照标准过程:首先,保存浏览器的父句柄。 字符串句柄= driver.getwindowhandle();
然后尝试通过等待切换到一个框架,以便驱动程序可以等待一段时间(如果DOM中现在不存在驱动程序)。 在框架上完成工作之后,然后再次切换到parentWindow(默认窗口)。 相同的过程可以应用于始终可以完美工作的每个帧。