selenium-多窗口和frame处理

1.切换窗口

适用场景:点击按钮后,重新打开一个窗口,想要在新的窗口定位操作,就需要切换窗口

原理:获取窗口的唯一标识就是句柄,获取到句柄,就可以切换到对应的窗口了

处理方法:

  • 获取到当前的窗口柄(driver.current_window_handle)
  • 获取到所有的窗柄 (driver.window_handles)
  • 判断是否是想要操作的窗口,如果是,就可以对窗口进行操作,如果不是跳转到另外一个窗口,对另一个窗口进行操作(driver.switch_to.window)

示例(百度搜索页和百度新闻页):

python 复制代码
class TestDemo():
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(3)  
  
    def test_baidu(self):
        self.driver.get("https://www.baidu.com/")
        search_window = self.driver.current_window_handle
        self.driver.find_element_by_xpath("//*[@id='s-top-left']/a[1]").click()
        handles = self.driver.window_handles
        print(handles)
        for handle in handles:
            if handle != search_window:
               self.driver.switch_to.window(handle)
               print(self.driver.title)
               self.driver.find_element_by_id('ww').send_keys('autotest')
               self.driver.find_element_by_id('s_btn_wr').click()

2.处理frame

什么是frame?

frame是html中的框架,在html中,frame可以在同一个窗口中显示不止一个页面。

Frame分类

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

frameset和普通的标签一样,不会影响正常的定位,可以使用index、id、name、webelement任意种方式定位frameset

而frame与iframe对selenium定位而言是一样的。selenium有一组方法对frame进行操作

注意:一个页面中可能存在多个frame;一个frame中可能嵌套frame

处理方法:

  • 跳转到frame:switch_to.frame(frame_reference) --frame_reference用于定位frame,可以是id,name,index,也可以是selenium获得WebElement对象。
  • 嵌套frame先进入父类frame再进入子frame,才可以对子frame中的元素处理
python 复制代码
driver.switch_to.frame('id') #id
driver.switch_to.frame('name') #name
driver.switch_to.frame('0') #index
driver.switch_to.frame(driver.find_element_by_xpath('path'))#也可以用css等定位方式
  • 跳转出frame :switch_to.default_content()
  • 切换到父级frame :switch_to.parent_frame()

示例(qq邮箱登录页面):

python 复制代码
def test_frame(self):
    self.driver.get("https://mail.qq.com/")

    self.driver.switch_to.frame(self.driver.find_element_by_xpath('//*[@id="QQMailSdkTool_login_loginBox_qq"]/iframe'))#切换到父类frame
    self.driver.switch_to.frame('ptlogin_iframe')#切换到frame
    time.sleep(3)
    self.driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
    self.driver.switch_to.default_content()#跳出frame
    self.driver.find_element_by_class_name('header_logo').click()
相关推荐
测试人社区-千羽2 小时前
AI重塑API测试数据生成的时代背景
人工智能·测试工具·程序人生·自动化·测试覆盖率
测试人社区—小叶子3 小时前
测试开发面试高频“灵魂八问”深度解析与应答策略
网络·人工智能·测试工具·云原生·容器·面试·职场和发展
中冕—霍格沃兹软件开发测试3 小时前
测试工具链的构建与团队协作:从工具集成到价值流动
人工智能·科技·测试工具·开源·appium·bug
测试人社区—小叶子3 小时前
低代码平台测试秘籍:OutSystems组件校验法则
运维·网络·人工智能·测试工具·低代码·自动化
测试人社区—小叶子7 小时前
接口测试全攻略:从Swagger到MockServer
运维·c++·人工智能·测试工具·机器人·自动化·测试用例
测试19987 小时前
软件测试方法之边界值分析法
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
测试人社区-小明7 小时前
AI在金融软件测试中的实践
人工智能·测试工具·金融·pycharm·机器人·github·量子计算
ewenge7 小时前
springboot+Selenium 实现html转图片(内含驱动包)
spring boot·selenium·html
测试人社区—小叶子8 小时前
DevTestOps成熟度模型:从CI/CD到质量门禁
java·运维·网络·人工智能·测试工具·ci/cd·自动化
tang&12 小时前
【Python自动化测试】Selenium常用函数详解
开发语言·python·selenium