Selenium —— 网页frame与多窗口处理!

一、多窗口处理.

1.1、多窗口简介

点击某些链接,会重新打开⼀个窗⼜,对于这种情况,想在新页⾯上操作,就
得先切换窗⼜了。
获取窗⼜的唯⼀标识⽤句柄表⽰,所以只需要切换句柄,就可以在多个页⾯灵
活操作了

1.2、多窗口处理流程

  • 先获取当前窗口的句柄driver.current_window_handle
  • 再获取所有的窗口句柄driver.windows_handles
  • 然后判断当前窗口是否为需要操作的窗口,如果不是则,切换到下一个窗口,如果是,则在当前窗口进行操作
def test_switch_window(self):
        """窗口切换操作"""
        # 1、打开百度
        self.driver.get("https://www.baidu.com")
        print(self.driver.title, self.driver.current_window_handle)
        # 2、打开搜狗
        self.driver.switch_to.new_window()
        self.driver.get("https://www.sougou.com")
        print(self.driver.title, self.driver.current_window_handle)
        # 3、打开hao360
        self.driver.switch_to.new_window()
        self.driver.get("https://hao.360.com/")
        print(self.driver.title, self.driver.current_window_handle)
        # 4、打开测试人
        self.driver.switch_to.new_window()
        self.driver.get("https://ceshiren.com")
        print(self.driver.title, self.driver.current_window_handle)
        handles = self.driver.window_handles
        print(handles)
        self.driver.switch_to.window(handles[0])
        self.driver.switch_to.window(handles[-1])
        print(self.driver.title)

二、多网页frame处理

2.1、frame简介

在web自动化中,如果一个元素始终无法定位,那么很有可能是frame中
  • 什么是frame呢?
frame是html的框架,所谓框架就是可以在同一个页面显示不止一个区域,基于html框架,又可以分为垂直框架和水平框架(cols,rows)
  • frame分类
    • frame标签分为frameset,ifame、frame三种
    • frameset和普通的标签一样,不会影响正常的元素定位,可以使用index、id、name、webelement等方式定位到frame
    • frame、iframe相当于selenium而言,则需要进行一些特殊的操作后,才能到定位到元素

2.2、多frame切换

  • frame存在两种
    • 一种嵌套的
    • 一种未嵌套的
  • 切换frame
    • driver.swich_to.frame():根据元素id、index切换frame
    • driver.switch_to.default_content():切换到默认的frame
    • deiver.switch_to.parent_frame():切换到父级frame

未嵌套的frame

  • driver.switch_to.frame(‘frame的id’):有id时优先使用id
  • driver.switch_to.frame(‘frame-index’):没有id的时间根据索引来处理,索引从0开始

嵌套的frame

  • 对于嵌套的frame,则先进入到frame的父节点,再进到子节点,然后可以就可以子节点中的元素对象进行操作了
  • driver.switch_to.frame(“父节点”)
  • driver.switch_to.frame(“子节点”)
def test_switch_frame(self):
        # ❖ 打开包含frame的web页⾯ https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
        # ❖ 打印’请拖拽我’元素的⽂本
        # ❖ 打印’点击运⾏’元素的⽂
        self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
        self.driver.switch_to.frame("iframeResult")
        ele01 = self.driver.find_element(By.ID, "draggable")
        print(ele01.text)
        ele02 = self.driver.find_element(By.ID, "droppable")
        print(ele02.text)
        self.action.drag_and_drop(ele01, ele02).perform()
        time.sleep(3)
        self.driver.switch_to.alert.accept()
        # self.driver.switch_to.default()
        # self.driver.switch_to.parent_frame()

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.确认(verifation)和断言(assert)有什么区别? 确认:当测试中的一个用例存在错误时,系统将会继续运行这些测试 断言:当测试中的一个用例存在错误时,系统将会退出当前用例 总而言之,确认和断言的不同在于,当出现错误情况之后,系统将会如何处理。 .test case 和testsuite的区别? test case是一个用例 test suite是一组用例 7.selenium IDE, selenium core, selenium core hta, selenium rc四者的概念以及它们之间的区别? selenium IDE(集成开发环境)。它是一个firefox的插件,可以录制、回放并编辑测试脚本 selenium Core(核心)。这是符合断言机制,由测试套件执行的平台。它是整个测试机制的核心部分,由纯javaScript代码组成 selenium Core Hta.这是针对IE设计的执行平台,运行于IE的最高字全级别之上。 selenium Remote Control(远程控制):它是一个代理与控制端,可代替selenium core/selenium DIE的客户端,并支持多语言 8.能不能在IE中录制脚本吗? 不能,只能在firefox中安装selenium IDE,而只有selenium IDE才存在录制的功能。 如果想测试一些,不能在firefox中正常显示的程序,则只有安装selenium RC,然后自己编写测试脚本,只有这样,脚本才能在ie中运行。 12.怎样安装多窗口模型? (1)启动selenium-server时,输入以下的命令:java-jar selenium-server.jar -multiwindow。则会在两个窗口中显示运行结果 (2)启动selenium-server时,输入以下的命令:java -jar selenium-server.jar -singlewindow。则会在一个窗口中显示运行结果 15.怎样访问变量? ${变量名} 16.在录制的过程中,遇到了提示框的话,要怎样处理才能在正常的回放? 17.录制到邮件的时候,不能正常录制,要如何处理呢? 录制的时候,首先要指定要框架,然后再输入文本。 例如:邮件通过firebug定位为: 在selenium ide中则需要手动的输入以下的内容: 再输入一条以下的命令:selectFrame relative=top 则,此时的脚本就能正常的运行了。 18.录制到组件的时候,不能正常录制,要怎样处理? 例如:上传附件(以及其它一些要上传的东西),刚发现附件并不是不能录制,而是你在界面中的定位不是很清楚,selenium不能识别。 19.录制时,会跳出多个窗口,此时要怎样处理? 存在四种解决方法,可以参考http://www.boobooke.com/bbs/viewthread.php?tid=41824&highlight=selenium中的第七集 具体方法如下:(1)java中可用如下的代码:String[] titles =selenium.getAllWindowTitles(); //得到所有窗口的标题 selenium.selectWindow("title="+titles[titles.length-1]); //选择最后打开的一个窗口 selenium.close(); //关闭最后打开的一个窗口 selenium.selectWindow("null"); //重新聚集在最开始的一个窗口(只有两个窗口的时候) (2)java中可用如下的代码:selenium.click("link=????"); 换成如下的两行代码 String url = selenium.getAttribute(link=????@href); selenium.open(url); 注:此方法也存在一定的缺陷,就是不能验证click点击事件是否正确。 (3)利用javascript去掉原代码中的target="_blank"的属性(目前为止还不清楚) (4)这种方法不清楚,看的不是很懂 20.什么是window
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值