18.多窗口处理与⽹页frame

发布时间 2023-12-29 12:50:35作者: 想要暴富的小男孩

多窗口处理与⽹页frame:

selenium⾥⾯如何处理多窗口场景

  ❖ 多个窗口识别

  ❖ 多个窗口之间切换

selenium⾥⾯如何处理frame

  ❖ 多个frame识别

   ❖ 多个frame之间切换

多窗口处理:

点击某些链接,会重新打开⼀个窗口,对于这种情况,想在新页⾯上操作,就 得先切换窗口了。

获取窗口的唯⼀标识⽤句柄表示,所以只需要切换句柄,就可以在多个页⾯灵 活操作了。

多窗口处理流程:

❖ 1. 先获取到当前的窗口句柄(driver.current_window_handle)

❖ 2. 再获取到所有的窗口句柄(driver.window_handles)

❖ 3. 判断是否是想要操作的窗口,如果是,就可以对窗口进⾏操作,如果不是, 跳转到另外⼀个窗口,对另⼀个窗⼜进⾏操作 (driver.switch_to_window)

多窗口切换案例:

打开百度页⾯

❖ 点击登录,

❖ 弹框中点击 ‘⽴即注册’,输⼊⽤户名 和帐号

❖ 返回刚才的登录页,点击登录

❖ 输⼊⽤户名和密码,点击登录

frame介绍:

在web⾃动化中,如果⼀个元素定位不到,那么很⼤可能是在iframe中。

❖ 什么是frame?

  ❖ frame是html中的框架,在html中,所谓的框架就是可以在同⼀个浏览器中显⽰不⽌⼀个页⾯。

  ❖ 基于html的框架,又分为垂直框架和⽔平框架(cols,rows)

❖ Frame 分类

  ❖ frame标签包含frameset、frame、iframe三种,

  ❖ frameset和普通的标签⼀样,不会影响正常的定位,可以使⽤index、id、name 、webelement任意种⽅式定位 frame。

  ❖ ⽽frame与iframe对selenium定位⽽⾔是⼀样的。selenium有⼀组⽅法对frame进⾏操作

❖ 演⽰:https://www.w3school.com.cn/tiy/t.asp?f=html_frame_cols

多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.switch_to_frame(“frame 的 id”)

   ❖ driver.switch_to_frame(“frame - index”) frame⽆ID的时候依据索引来处 理,索引从0开始 driver.switch_to_frame(0)

Frame嵌套:

处理嵌套的iframe

  ❖ 对于嵌套的先进⼊到iframe的⽗节点,再进到⼦节点,然后可以对⼦节点⾥ ⾯的对象进⾏处理和操作

  ❖ driver.switch_to.frame(“⽗节点”)

  ❖ driver.switch_to.frame(“⼦节点”)

多frame切换案例:

多frame切换案例:

❖ 打开包含frame的web页⾯ https:// www.runoob.com/try/ try.php?filename=jqueryui-apidroppable

❖ 打印’请拖拽我’元素的⽂本

❖ 打印’点击运⾏’元素的⽂本

多frame切换案例:

def test_framedeal_1(self):

   self.driver.get(“https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")

   self.driver.switch_to.frame("iframeResult")

   print(self.driver.find_element_by_id("droppable").text)

   self.driver.switch_to.parent_frame()

   print(self.driver.find_element_by_id("submitBTN").text)