【软件测试】自动化测试常用函数 二

目录

🌴等待

🚩强制等待

🚩隐式等待

🚩显示等待

🌳浏览器导航

🌲弹窗

🚩警告弹窗+确认弹窗

🚩提示弹窗

🎄上传文件

🍀浏览器参数设置

🚩设置无头模式

🚩设置浏览器加载策略


🌴等待

首先由以下代码:百度搜索迪丽热巴后,在点击百度百科,使用选择器

执行结果:发现报错了,而且是说没有找到这个元素

那么这个元素不存在吗?我们查看一下 ,发现这个元素是真实存在的。

使用xpath:

执行结果:还是没有找到

注意:复制过来的选择器或者xpath,粘贴之后不能修改!

NoSuchElementException异常:

如果避免因为渲染过慢出现的自动化误报的问题呢?可以使用selenium中提供的三种等待方法:

🚩强制等待

Thread.sleep()   

代码:

执行结果:正常退出

使用xpath是一样的,这里不在过多演示。

该方法就是死等,()中的参数单位为毫秒,必须等到该时间之后才开始执行代码,也就是阻塞程序的方式来等待。

  • 优点:写法简单,好理解,直接阻塞程序执行
  • 缺点:极大的增加了自动化的执行时间

🚩隐式等待

隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则不再等待,代码继续执行,直到超时没找到元素才会报错。

implicitlyWait()   参数:Duration类中提供的毫秒、秒、分钟等方法

代码:隐式等待3s,表示使用隐式等待去查找元素,若元素在1s的时候查找到了,则不在继续等待,如何等待的呢?在3s之内,会轮询的查找元素。

源码:

执行结果:

隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就一直生效。

例如上述代码,在隐式等待这行代码执行完成后,执行了点击"百度百科"操作,我们再清空迪丽热巴之后,再次搜索邓紫棋,且获取"邓紫棋"文本。

代码:

执行结果:要获取的是邓紫棋,然后返回的迪丽热巴

我们分别去查看"迪丽热巴"文本标签和"邓紫棋"文本标签,发现两个标签是一样的,也就是程序执行的速度太快了,隐式等待的作用只是看一下元素是否存在,而不是元素对不对,所以上述代码的隐式等待只会查找你的输入框,按钮,文本是否存在,对于点击,清空,输入不会管,当查找到"邓紫棋"文本标签时,"邓紫棋"还没有输入呢,这当然能找到,但是迪丽热巴的名字。

如何解决?在查找邓紫棋关键词之前强制等待3s,在这3s里claer,sendkeys都能执行完成。

  • 优点:智能等待,作用于全局
  • 缺点:只能查找元素,每次查找元素都要等待

🚩显示等待

显示等待也是一种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码

这里面有两个参数,第一个是驱动对象,第二个参数是要设置指定的超时时间,until是需要满足一个什么样的条件,是一个表达式。

$express:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类

返回值:boolean

ExpectedConditions预定义方法的一些示例:

  • elementToBeClickable(By locator)‒用于检查元素是否可以点击,以便你可以单击它。是一个By类
  • textToBe (Bylocator, String str)-检查元素是否复合预期(精确匹配)。
  • presenceOfElementLocated(Bylocator)‒检查页面的元素是否存在。
  • urlToBe(java.lang.String url)‒检查当前页面的URL是一个特定的URL。

代码:检查元素是否可以点击

执行结果:

  • 优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活
  • 缺点:写法复杂,只能作用在当前条件上

代码:检查元素是否复合预期(查找百度首先"新闻"文本)

执行结果:匹配成功

隐式等待和显示等待一起使用效果如何呢?

代码:

执行结果:

结果:重试多次,最终打印的等待时间有10s、11s....

结论:注意混合隐式和显式等待,可能会导致不可预测的等待时间。

🌳浏览器导航

常见操作:

1)打开网站

driver.navigate().to("https://baidu.com/");

driver.get("https://baidu.com/");

2)浏览器前进,后退,刷新

driver.navigate().back();  =>前进

driver.navigate().forward();  =>后退 

driver.navigate().refresh();  =>刷新

🌲弹窗

弹窗是在页面是找不到任何元素的,这种情况怎么处理?使用selenium提供的Alert接口

🚩警告弹窗+确认弹窗

我们在网页上,点击了某个元素就会触发弹窗,然后再通过点击确认来关闭弹窗,若想通过页面元素的定位这个确认按钮,关闭这个弹窗,此时这个弹窗是无法定位的。

在selenium处理弹窗的方式:

由于driver是作用于网页上,不能作用于driver,所以先要切换弹窗

🚩提示弹窗

若有弹窗未处理会报一个异常,无法继续执行页面元素相关操作

处理弹窗:

🎄上传文件

点击文件上传的场景下会弹窗系统窗口,进行文件的选择。 selenium无法识别非web的控件,上传文件窗口为系统自带的,无法识别窗口元素,但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的。

代码:

执行结果:

🍀浏览器参数设置

🚩设置无头模式

简单来说,设置成无头模式,表示自动化程序在后台执行,不会打开浏览器页面,实际上是执行了的,只不过在当前电脑界面上看不到效果。上述我们所执行的代码,都是能看到浏览器页面的,当我们增加无头模式后,就看不到了

代码:

在工作中,运行自动化不会人工一直盯着自动化的执行效果,一般都是设置无头模式,通过自动化执行的结果来分析。

🚩设置浏览器加载策略

在有的情况下,可能会发现自己手动打开的网页加载非常快,但是通过自动化脚本代码打开的网页加载很慢,慢到等待都报错了。

增加浏览器的加载模式:有三种

代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值