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

目录

1、强制等待

2、隐式等待

3、显示等待


1、强制等待

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

java 复制代码
    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天还没有获取到页面元素,那么就会报错。

使用的语句:

java 复制代码
webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);

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

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

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

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

java 复制代码
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方法

java 复制代码
    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

总结一下:

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

相关推荐
深圳博众测控5 小时前
博众测控 | ISO 16750-2:2023汽车电气测试新标准解读:关键变化与测试设备选型
人工智能·测试工具·汽车
测试界的世清12 小时前
金九银十软件测试面试题(800道)
测试工具·面试·职场和发展
帝落若烟12 小时前
loadrunner {“msg“:“请求访问:/getInfo,认证失败,无法访问系统资源“,“code“:401}
测试工具·压力测试
卓码软件测评13 小时前
第三方软件课题验收测试【使用Docker容器部署LoadRunner负载生成器以实现弹性压测 】
测试工具·docker·容器·性能优化·单元测试·测试用例
云小逸13 小时前
【网络通信】Wireshark 教程与抓包实战
网络·测试工具·wireshark
zhaotiannuo_199813 小时前
渗透测试之wireshark
网络·测试工具·wireshark
Wpa.wk14 小时前
Docker 底层原理- 镜像分层和联合文件系统(了解)
java·运维·经验分享·测试工具·docker·容器
云小逸15 小时前
【网络通信】Wireshark 与 TCP/IP 五层模型速读手册
tcp/ip·测试工具·wireshark
xuegao08071 天前
postman测试webservice服务接口
测试工具·postman
程序员三藏1 天前
selenium测试框架快速搭建
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例