Selenium自动化测试之窗口切换

        在Selenium中,窗口切换是一个重要的功能,我们在做web自动化测试时,经常需要处理多个窗口或标签页,下面是对窗口切换方法的一些简单总结!

一、窗口切换的基本概念

     窗口切换是指在Selenium自动化测试过程中,从一个浏览器窗口或标签页切换到另一个窗口或标签页的操作。这种情况,通常发生在点击链接打开新窗口之时!

二、窗口切换的方法

  1. 根据索引实现窗口切换

    1. 实现方法:
    #获取所有窗口的句柄 all_handles = driver.window_handles #切换窗口:(通常新标签页的句柄在列表的末尾) driver.switch_to.window(all_handles[-1])
    2. 优点:
      操作简单、方便
    3. 缺点
      这种方法首先假设,窗口句柄是按照先后顺序存放在all_handles列表中,但在实际工作2中,窗口句柄的顺序可能因浏览器的不同而有所差异,因此容易出现错误。

  2. for循环遍历

    1. 实现方法:

    #获取所有窗口的句柄
    all_handles = driver.window_handles
    # 获取当前窗口句柄
    c_handle = driver.current_window_handle
    #获取新窗口句柄并切花
    for handle in all_handles:
        if handle != c_handle:
            driver.switch_to.window(handle)
    2. 优点

         如果浏览器只有两个标签页,使用这种方法会非常方便、准确

    3. 缺点

        如果浏览器存在多个标签页(3个及以上),则不合适了

  3. for循环遍历+判断验证
    1. 实现方法
      1. #获取所有窗口的句柄
        all_handles = driver.window_handles
        
        #目标窗口的url地址(举例,也可以用其他的特征,如页面标题等)
        target_url = "http://example.com/page2"
        
        #获取新窗口句柄并切花
        for handle in all_handles:
            #先切换
            driver.switch_to.window(handle)
            #在验证,成功则退出循环,否则继续遍历
            if target_url in driver.current_url:
                break
    2. 优缺点:这种方法实现起来虽然稍微麻烦,但适用于页面中有多个窗口情况
  4. 实例
    1. # @Time      :2024/12/2120:15
      # @Author    :By: xuhf
      # @Email     :121068023@qq.com
      from selenium import webdriver
      import time
      from selenium.webdriver.common.action_chains import ActionChains
      
      driver = webdriver.Chrome()
      driver.get("https://www.baidu.com/")
      time.sleep(2)
      
      #点击百度新闻(新增一个标签页:2)
      driver.find_element_by_link_text("新闻").click()
      time.sleep(2)
      
      #点击贴吧(再次新增一个标签页:3)
      driver.find_element_by_link_text("贴吧").click()
      time.sleep(2)
      
      #窗口切换
      #获取所有窗口的句柄
      all_handles = driver.window_handles
      
      #目标窗口的url地址(举例,也可以用其他的特征,如页面标题等)
      target_url = "https://news.baidu.com/"
      
      #获取新窗口句柄并切花
      for handle in all_handles:
          #先切换
          driver.switch_to.window(handle)
          #在验证,成功则退出循环,否则继续遍历
          if target_url in driver.current_url:
              break
      
      
      driver.find_element_by_id("ww").send_keys("dd")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值