在web应用自动化测试中,点击一个链接或者按钮会打开一个新的浏览器窗口,会出现多个窗口实例。默认情况下的焦点在主窗口(父窗口),如果要对子窗口进行操作,就需要首先切换到子窗口。 Selenium WebDriver给每个窗口指定了一个唯一的ID,Selenium通过这个唯一ID实现在多个窗口之间切换。常见的有iframe,弹出对话框alert,新窗口等。本文将介绍这几种窗口的切换。 # iframe切换 在web自动化中,如果一个元素定位始终不到,如果locator没有写错,很大概率就是这个元素在iframe中。 ## 什么是frame? frame是html中的框架,通过使用frameset 标签将页面进行垂直或者水平分离。包含frameset、frame、 iframe三种标签。 演示代码:[
' target='_blank'>
[/reply]](
' target='_blank'>
[/reply]) ## frame切换 切换到frame或者iframe后就可以进行操作,操作完成后需要切换回原来的框架: ```python driver.switch_to.frame() #根据元素id或 index切换 driver.switch_to.default_content() #切换到默认 frame driver.switch_to.parent_frame() #切换到父级 frame ``` ## 多 frame切换 测试页面:[
' target='_blank'>
[/reply]' target='_blank'>
' target='_blank'>
[/reply][/reply]](
' target='_blank'>
[/reply]' target='_blank'>
' target='_blank'>
[/reply][/reply]) 切换iframe,打印'请拖拽我'元素文本 ![]https://img2020.cnblogs.com/blog/2229336/202012/2229336-20201220121809452-132566142.png) ```python def test_iframe(self): self.driver.get("
' target='_blank'>
[/reply]' target='_blank'>
' target='_blank'>
[/reply][/reply]") self.driver.switch_to.frame("iframeResult") print(self.driver.find_element_by_id("draggable").text) # 打印'请拖拽我' #
