| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 开学了软测的同学快来--selenium,必须要知道的操作-等待时间及窗口操作-详解+项目实战 -> 正文阅读 |
|
[开发测试]开学了软测的同学快来--selenium,必须要知道的操作-等待时间及窗口操作-详解+项目实战 |
?????? 前面我们讲了两期的软测,理论加元素定位,其中元素定位尤为重要。不熟练就不能准确的定位到自己想要定位的元素,所以前一期的练习还请各位多多练习,给到了项目地址可别浪费啊。 ???????? 最后废话再多一句,博主微信qing_an_an。水军一枚。欢迎骚扰。加的人好少啊。 目录 强制等待????????最简单的一种办法就是强制等待sleep(X),顾名思义说的就是你必须原地等待满足我设定的时间,否则不准进入下一步。 ????????使用方法:time.sleep(X),等待X秒后,进行下一步操作。在python中,是基于time模块的sleep方法来实现。 ??????? 看看他的优缺点: ???? 缺点: ????????? 1. 不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经 完成了,但等待时间还没有到,浪费时间) ????????? 2. 如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。? ???? 优点: ?????????? 1. 使用简单,可以在调试时使用。 ??????? 这里举一个最简单例子,打开百度搜索,等待三秒,自动关闭。 ??????? 注意:我这里是导入了时间模块中的sleep方法,如果你不这样导入也可以直接import time,但是写的时候就必须写成time.sleep(3)了。
隐式等待????????????????其设置了一个最长等待时间,如果在规定时间内网页元素加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步操作。 ????????使用方法:implicitly_wait(X),在X时间内,页面加载完成,进行下一步操作。 ??????? 看看优缺点: ????????缺点: ????????????????1. 使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;但有时候页面想 要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部 完成才能执行下一步。 ????????????????2. 在等待时间内页面没有加载完成,时间一到也会进入下一步操作;这种情况可能出现要定位的元素没有出现,从而报元素无法找到的错误。? ???????? 优点: ????????????????1. 隐性等待对整个driver的周期都起作用,每一次操作都会调用隐式等待,所以只要设置一次即可 ???????? 注意:隐式等待不建议写在自己的模块中,调试的时候用用就好。这里隐式等待作用全局,所以写在网页后就好。当然也可以不写在这,看个人兴趣。
显示等待??????? 显示等待,对指定元素进行等待的一种等待方式。通过设置最大等待时间,检查频率对页面的元素来进行等待,一旦找到元素,则停止等待,进入后续步骤。 ????????它主要的意思就是:程序每隔X秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最大时间,然后抛出TimeoutException异常。 ????????缺点: ????????????????1. 使用相对比较复杂; ????????????????2. 和强制等待类似,每一行等待只执行一次,如果要进行多个元素的等待,则需要多次写入? ???????? 优点: ????????????????1. 等待判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率。
until使用思路:????????含义:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常。 ????????until(self, method, message= '')参数: ????????????????1. method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False,一般使用lambda匿名函数 ????????????????2. message:提示信息,出现异常时会将这个信息输出在控制台 ??????? 注意:显示等待虽然现在用起来很麻烦,但是当你需要判断大量元素的时候,使用元素封装之后就不会这么认为了
????????这里我做了一个显示等待判断,判断元素'kw'是否存在页面中,并打印它的结果,结果为True或False,True就会执行点击操作,否则等待10S(每隔0.5秒检查一次,因为是默认的所以就没写了),抛出异常。 ??????? 这里的lambda是一个表达式,也叫匿名函数,有点像def,但是它使用起来比较简单,这里只需要记住即可。 until_not????????含义:与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行
??????? 补充:lambda四种常用用法
??????? 上述除了display用法还有两种用法:
Expected_conditions使用思路????????expected_conditions是Selenium的一个模块,主要用于对页面元素的加载进行判断,包括元素是否 存在,可点击等等。 ????????Expected Conditions的使用场景一版有两种: ????????????????1. 直接在断言中使用 ????????????????2. 与WebDriverWait配合使用,显示等待页面上元素出现或者消失。 ????????一般情况下,我们在使用expected_conditions模块时都会对其进行重命名,通过as关键字对其重命名为EC,所以也叫EC模块。
??????? 这里我加了一个点,就是visibility_of_element_located(),判断一个元素是否可见,这个方法也是一个比较常用的方法之一。 ??????? 除了上述所讲的这些用法,下面我列出了几种用法,自行借鉴哦,用法是类似的,看完上面的例子需要学会举一反三。
???????? 注意点: ??????? ????????设置隐式等待后,虽然针对的是全局,加上强制等待,依然可以起到强制等待作用。显示等待,只针对元素,所以隐式等待过程中只要检测到针对的元素,显示等待立即生效,否则等待对应的时间,并收到抛出的异常。 Chrome无头模式设置????????1. 声明一个谷歌配置对象:opts = webdriver.ChromeOptions() ????????2. 设置无头模式 ????????????????? 方式一:调用方法:set_headless() ????????????????? 方式二:设置headless属性值,True->无头模式,False->正常模式 ????????????????? 方式三:添加参数方法:add_argument('-headless') ,headless->无头模式,head->正常模式 ????????3. 实例化浏览器对象是注入配置选项: driver = webdriver.Chrome(chrome_options = opts) ??????? 注意:方式一后续可能被抛弃,所以这里就不建议使用了。 ??????
???????? 这里我用的是截图的方式证明此处是用的无头模式,代码跑起来后看不到界面,所以用了这个方法。 ??????? 注意:str(int(time.time()),代码中的这一块代码是获取时间的年月日,你看到的是一串数字,需要转换,转换后就是你跑用例是截图的年月日了。你也可以用
???????? 这样打印出来的更加的明了。时间命名的方式很多,可以自行查询。 Firefox无头模式设置
??????? 这里我直接用判断一个标题的方式来验证它,注意了其中set_headless()是弃用的方法,不过依然可以使用,控制台会告诉你: ???????? 注意:这里是没有谷歌的方式三无头模式,火狐并不支持。 ?窗口设置????????设置窗口为指定大小:driver.set_window_size(600,980) ????????窗口最小化:driver.minimize_window() ????????窗口最大化:driver.maximize_window()
多窗口切换????????每一个窗口的唯一标识,每个窗口的句柄都不一样 ????????????????1. 获取当前句柄 :driver.current_window_handle ????????????????2. 获取所有句柄:driver.window_handles ????????????????3. 切换句柄:driver.switch_to_window(句柄号)弃用,看我下面的使用
??????? 这里看不懂的就需要好好琢磨了,你先把获取窗口号并切换窗口的代码注释掉,看看效果,ele是我获取的百度界面的窗口,这里你会觉得我都点击hao123按钮了,跳转了,怎么不是获取的那个hao123界面的窗口句柄号。因为没有切换到hao123所以获取的还是百度界面。 ??????? 这里ele是我填的一个坑,你可以把这个写在fox.get的后面,这样或许就好理解一些, 获取全部窗口号,你可以打印看看控制台信息,是列表形式的,所以我切换窗口的时候用的列表取值,[-1]是去最后一个,这个不知道看我的python系列吧。然后就可以进行下一步操作了,点击网易按钮,就可以正常定位并跳转了。 切换iframe操作????????定位ifarme: ????????????????1. selenium提供了switch_to.frame(iframe元素)的方法来进入iframe ????????????????2. selenium提供switch_to_default_content()的方法来退出iframe ???????? 举个QQ空间的例子,从图上可以看到吧,这里是有一个iframe的,算是一个小窗口吧,个人偏见理解。里面有id,有name,但是我们不定它,我们定位这个标签iframe。
??????? switch_to_default_content()会有一个横线划过去,表示弃用的意思,后续的版本可能就会抛弃了。推荐使用switch_to.default_content(),效果一致。 弹框处理????????常见的弹框类型有:Alter、confirm、prompt三种。并不是所有的弹出框都叫 alert, 在对弹出处理时首先要确定到底是属于哪一种,然后再用对应的方法去进行处理。 ??????? 提供解决方法,这里的弹窗处理跟切换窗口操作相差其实不大。学会了上面两种,这一种在后面遇到的时候翻出来看看就能知道怎么用了。 alert\confirm\prompt 弹出框操作主要方法有: ????????1. switch_to_alert() 首先要切换到 alert 弹出框上,才能做确定、取消等这些操作 ????????2. accept() :点击"确认" ????????3. dismiss() :点击"取消" ????????4. send_keys() :输入文本值 --仅限于 prompt,在 alert 和 confirm 上没有输入框 ????????5. text:获取文本值 ??????? 具体的操作也是实例化驱动,用驱动去点上这一系列的操作即可。 ???????? 这里举例一个accept()操作。以百度设置为例:
??????? 注意:此处有一点超纲,鼠标操作下一章才会讲到,所以这里就先做了解。鼠标操作是个定位神器,像此处的设置按钮,一般的元素定位是定位不到的。不信你可以试试。 ??????? 《《《本章结》》》 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 0:41:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |