当前位置: 首页 > news >正文

selenium常见等待机制及其特点和使用方法

目录

1、强制等待 

2、隐式等待 

3、显示等待 


1、强制等待 

强制等待是在程序中直接调用Thread.sleep(timeout) ,来完成的,该用法的优点是使用起来方便,语法也比较简单,缺点就是需要强制等待固定的时间,可能会造成测试的时间过长。

    private static void test02() throws InterruptedException {ChromeOptions options=new ChromeOptions();options.addArguments("--remote-allow-origins=*");WebDriver webDriver=new ChromeDriver(options);webDriver.get("https://www.baidu.com/");webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");webDriver.findElement(By.cssSelector("#su")).click();webDriver.findElement(By.cssSelector("#kw")).clear();sleep(3000);webDriver.findElement(By.cssSelector("#kw")).sendKeys("前端vue");webDriver.findElement(By.cssSelector("#su")).click();}

引入等待的原因是很多时候,程序运行的速度是大于网页页面的渲染速度的,所以需要引入等待机制。 

2、隐式等待 

如果等待时间是1天,使用强制等待就会等待1天的时间,对于隐式等待来说,它最多等待1天。因为如果我们在这一天内,如果获取了页面上的元素,那么隐式等待就会不再等待下去,而是直接开始执行后续的代码了。 如果超过1天还没有获取到页面元素,那么就会报错。

使用的语句:

webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);

 其中使用隐式等待需要使用驱动中的manage方法,然后调用timeouts方法的implicitlyWait方法。

其中比较重要的就是implicitlyWait了,可以看一下其源码:

可以看到implicitlyWait方法的参数一个是long类型,也就是指定的数字,后面的是TimeUnit类型,也就是指定单位。

这里我们用实际代码测试一下:

private static void test02() throws InterruptedException {ChromeOptions options=new ChromeOptions();options.addArguments("--remote-allow-origins=*");WebDriver webDriver=new ChromeDriver(options);webDriver.get("https://www.baidu.com/");webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");webDriver.findElement(By.cssSelector("#su")).click();webDriver.findElement(By.cssSelector("#kw")).clear();//sleep(3000);//隐式等待1天webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);webDriver.findElement(By.cssSelector("#kw")).sendKeys("前端vue");webDriver.findElement(By.cssSelector("#su")).click();}

我们设置的等待一天,但是对于隐式等待来说一下程序就完成了。因为等待后面的元素,直接从页面获取得到,所以无需等待1天即可完成测试。

3、显示等待 

举个例子,比如我们要在百度搜索的首页来判断最下方的元素是否是超链接,是否可以点击 

点开该方法,可以看到有很多用来判断元素的方法 ,其中我们要使用的是判断元素是否可以被点击,所以使用elementToBeClickable方法

    private static void test07() {//创建驱动WebDriver webDriver=new ChromeDriver();//打开百度webDriver.get("https://www.baidu.com/");//判断元素是否可以被点击WebDriverWait webDriverWait=new WebDriverWait(webDriver,3000);webDriverWait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#bottom_layer > div > p:nth-child(7) > a")));}

没有报错,说明是满足条件的,如果我们设置了一个不存在的元素,等到设置的等待时间过了,就会报错了NoSuchElementException

总结一下:

显示等待使用语法比较复杂,但是可以指定某一个元素进行等待,减少了整个测试等待的时间。

http://www.lryc.cn/news/125610.html

相关文章:

  • C++物件数组的常用方法介绍
  • 云计算:新一代的技术革命
  • 数据结构—图的应用
  • Unity 鼠标控制 UI 放大、缩小、拖拽
  • tensorflow 模型计算中,预测错误;权重参数加载
  • Jay17 2023.8.14日报 即 留校集训阶段性总结
  • 【C语言】小游戏-扫雷(清屏+递归展开+标记)
  • 云服务 Ubuntu 20.04 版本 使用 Nginx 部署静态网页
  • 无后效性
  • Kubernetes系列-删除deployment和pod
  • kotlin字符串方法
  • ubuntu篇---配置FTP服务,本机和docker安装
  • SpringBoot中properties、yml、yaml的优先级
  • SHELL 基础 SHELL注释 及 执行SHELL脚本的四种方法
  • 【Spring】深入探索 Spring AOP:概念、使用与实现原理解析
  • LocalDate介绍和使用
  • 三、使用注解形式开发 Spring MVC程序
  • 【Go】常见的四个内存泄漏问题
  • 【LeetCode-简单】剑指 Offer 29. 顺时针打印矩阵(详解)
  • TOMCAT基础
  • 自动化集装箱码头建设指南
  • 为什么要用redis
  • QT qmake解析
  • 【TypeScript】this指向,this内置组件
  • MySQL 深度分页优化
  • 如何在CSS中水平居中一个元素?
  • 生信豆芽菜-ESTIMATE预测免疫评分
  • 分享一颗能用在TYPE-C接口取电协议芯片LDR6328Q,方便好用
  • 【java】Java与SQLite3数据库类型之间对应关系
  • ELK常见部署架构以及出现的问题及解决方案