WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。
解决方法:
driver.switch_to.frame
(
id/name/obj
)
switch_to.frame()默认可以直接取表单的id或name属性。如果没有可用的id和name属性,可以先定位到frame/iframe,再将定位对象传给switch_to.frame(对象)方法。
xf = driver.find_element_by_xpath('//*[@class="if"]')
driver.switch_to.frame(xf)
...
driver.switch_to.parent_frame()
切到父frame。影响性能,可以提给开发,让其改进。driver.switch_to.default_content()
跳回最外层的页面
02
页面跳转到新标签页,或弹出警告框等
在页面操作过程中有时候点击某个链接会弹出新窗口,这时就需要切换焦点到新窗口上进行操作。
-
解决方法1:
driver.switch_to.window(
window_handle
)
切换到新窗口。首先获取当前窗口的句柄
driver.current_window_handle
,接着打开弹出新窗口,获得当前打开的所有窗口的句柄driver.window_handles
。通过for循环遍历handle,如果不等于第一次打开窗口的句柄,那么一定是新窗口的句柄,因为执行过程只打开了两个窗口;改变条件,如果等于第一次打开窗口的句柄,那么可以切换回第一次打开的窗口。 -
解决方法2:
对于JavaScript生成的alert、confirm以及prompt,无法使用前端工具对弹出窗口进行定位的,使用
driver.switch_to.alert
方法定位弹出框。
alert的方法有:
-
.accept() '等同于点击“确认”或“OK”'
-
.dismiss() '等同于点击“取消”或“Cancel”'
-
.text '获取alert文本内容,对有信息显示的alert框'
-
.send_keys(text) '发送文本,