- selenimu 里面如何处理多窗口场景
- 多个窗口识别
- 多个窗口之间切换
- selenium 里面如何处理 frame
- 多个 frame 识别
- 多个 frame 之间切换
多窗口处理
- 点击某个链接,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。
- 获取窗口的唯一标示用句柄标示,所以只需要切换句柄,就可以在多个页面灵活操作了。
多窗口处理流程
- 1.先获取到当前的窗口句柄(driver.getWindowHandle)
- 2.再获取到所有的窗口句柄(driver.getWindowHandles)
- 3.判断是否是想要操作的窗口,如果是,就可以对窗口进行操作,如果不是,跳转到另外一个窗口,对另一个窗口进行操作(driver.switchTo().window(name))
frame
frame 介绍
- 在 web 自动化中,如果一个元素定位不到,那么很大可能是在 iframe 中。
- 什么是 frame?
- frame 是 html 中的框架,在 html 中,所谓的框架就是可以在同一个浏览器中显示不止一个页面。
- 基于 html 的框架,又分为垂直框架和水平框架(col, rows)
- Frame 分类
- frame 标签包含 frameset、frame、iframe 三种。
- frameset 和普通的标签一样,不会影响正常的定位,可以使用 index、id、name、webelement 任意中方式定位frame。
- 而 frame 与 iframe 对 selenium 定位而言是一样的。selenium 有一组方法对 frame 进行操作。
多 frame 切换
- frame 存在两种:
- 一种是嵌套的,一种是未嵌套的。
- 切换 frame
- driver.switch_to.frame() # 根据元素id 或者 index 切换 frame
- driver.switch_to.default_content() # 切换到默认 frame
- driver.switch_to.parent_frame() # 切换到父级 frame
frame 未嵌套
- 处理未嵌套的 iframe
- driver.switchTo().frame("frame 的 id")
- driver.switchTo().frame("frame - index") frame 无 ID 的时候依据索引来处理,索引从 0 开始 driver.switchTo().frame(0)
Frame 嵌套
- 处理嵌套的 iframe
- 对于嵌套的先进入到 iframe 的父节点,再进到子节点,然后可以对子节点里面的对象进行处理和操作。
- driver.swithc_to.frame("父节点")
- driver.swithc_to.frame("子节点")