selenium测试(Java)-- 显式等待(九)

显式等待可以使用selenium预置的判断方法,也可以使用自定义的方法。

 1 package com.test.elementwait;
 2
 3 import org.openqa.selenium.By;
 4 import org.openqa.selenium.WebDriver;
 5 import org.openqa.selenium.firefox.FirefoxDriver;
 6 import org.openqa.selenium.support.ui.ExpectedCondition;
 7 import org.openqa.selenium.support.ui.ExpectedConditions;
 8 import org.openqa.selenium.support.ui.WebDriverWait;
 9
10 public class ExplicitWait {
11
12     public static void main(String[] args) {
13         WebDriver driver = new FirefoxDriver();
14         driver.get("http://www.baidu.com");
15         driver.manage().window().maximize();
16
17         //标题是不是“百度一下,你就知道”
18         new WebDriverWait(driver,5).until(ExpectedConditions.titleIs("百度一下,你就知道"));
19         //标题是不是包含“百度一下”
20         new WebDriverWait(driver,5).until(ExpectedConditions.titleContains("百度一下"));
21         //判断该元素是否被加载在DOM中,并不代表该元素一定可见
22         new WebDriverWait(driver,5).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=‘kw‘]")));
23         //判断元素(定位后)是否可见
24         new WebDriverWait(driver,5).until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id=‘kw‘]"))));
25         //判断元素是否可见(非隐藏,并且元素的宽和高都不等以0)
26         new WebDriverWait(driver,5).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=‘kw‘]")));
27         //只要存在一个就是true
28         ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[@id=‘kw‘]"));
29         //元素中的text是否包含语气的字符串
30         ExpectedConditions.textToBePresentInElementLocated(By.xpath("//*[@id=‘kw‘]"), "百度一下");
31         //元素的value属性中是否包含语气的字符串
32         ExpectedConditions.textToBePresentInElementValue(By.xpath("//*[@id=‘kw‘]"), "***");
33         //判断该表单是否可以切过去,可以就切过去并返回true,否则放回false
34         ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("**"));
35         //判断某个元素是否不存在于DOM或不可见
36         ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@id=‘kw‘]"));
37         //判断元素是否可以点击
38         ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=‘kw‘]"));
39         //等到一个元素从DOM中移除
40         ExpectedConditions.stalenessOf(driver.findElement(By.xpath("//*[@id=‘kw‘]")));
41         //判断某个元素是否被选中,一般用在下拉列表
42         ExpectedConditions.elementToBeSelected(By.xpath("//*[@id=‘kw‘]"));
43         //判断某个元素的选中状态是否符合预期
44         ExpectedConditions.elementSelectionStateToBe(By.xpath("//*[@id=‘kw‘]"), true);
45         //判断某个元素(已定位)的选中状态是否符合预期
46         ExpectedConditions.elementSelectionStateToBe(driver.findElement(By.xpath("//*[@id=‘kw‘]")), false);
47         //判断页面中是否存在alert
48         new WebDriverWait(driver,5).until(ExpectedConditions.alertIsPresent());
49         //--------------------自定义判断条件-----------------------------
50         WebDriverWait wait = new WebDriverWait(driver, 3);
51         wait.until(new ExpectedCondition<Boolean>() {
52              public Boolean apply(WebDriver webDriver) {
53                  return !driver.findElement(By.xpath("//*[@id=‘kw‘]")).getAttribute("class").contains("x-form-invalid-field");
54                              }
55                  });
56
57     }
58
59 }

注:

1.除了以上内容,selenium还提供了很多预置的判断方法。

2.这些判断方法,在超出时间限制时就会抛出异常。

时间: 2025-01-04 22:40:45

selenium测试(Java)-- 显式等待(九)的相关文章

(java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java.util.Set;import java.util.concurrent.TimeUnit; import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.openqa.selenium.By;import org.openqa.

基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待

一.隐式等待 package com.automation.waits; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openq

selenium 找不到元素 (显式等待 和隐式等待的区别)

selenium自动化页面元素不存在异常发生的原因有一下几点: (1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功.此时可以加载页面等待时间. (2)查到的元素没有在当前的iframe或者frame中.此时需要切换至对应的iframe或者frame中才行. (3)元素错误. 解决页面加载时间所引起的元素找不到,我们可以为页面设置加载时间.时间的设置分为以下三种: (1)显式等待 显示等待是针对于某个特定的元素设置的等待时间,如果在规定的时间范围内,没有找到元素,则会抛出异常,

【java+selenium3】隐式等待+显式等待 (七)

一.隐式等待 -- implicitlyWait 调用方式:driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit); //隐式等待调用方式,5秒+时间单位(枚举类型) driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 注意: 1.隐式等待只能作用于元素的等待. 2.智能等待,如果元素在指定的时间内找到,则不会继续等待,否则在指定时间内未找到

[selenium webdriver Java]隐式的等待同步

Selenium WebDriver提供了隐式等待来同步测试.当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后,抛出找不到元素异常 即,当元素没有立即出现的时候,隐式等待将等待一段时间后,再查找DOM.默认时间是0. 一旦设置了隐式等待,它将存在在整个webdriver对象实例的生命周期中,隐式等待会让一个正常响应的应用的测试变慢,会在寻找每个元素时进行等待,这样增加了整个测试执行的时间. 应该避免或减少使用隐式等待 //等待60s dri

java+selenium+new——显式等待和自定义显式等待

原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12292780.html

java + selenium测试框架(之等待机制) 版本演化二

使用selenium-ide录制,以及直接用selenium-java.jar写测试用例,你会发现它的执行速度很快.大大超过了手工操作的速度,甚至可能也超过了浏览器加载的速度(比浏览器都快?结果就是找不到元素). 如果页面上确实有某个元素,但是在测试时提示NoSuchElementException,那原因有两个:1,你抓取元素的策略错了:2,执行时元素还没加载出来. 在调用了driver.get(url)之后,为了保证元素能够取到正确初始化,需要增加一个等待加载完成的函数,保证页面完成加载.

Java显式锁学习总结之二:使用AbstractQueuedSynchronizer构建同步组件

Jdk1.5中包含了并发大神Doug Lea写的并发工具包java.util.concurrent,这个工具包中包含了显示锁和其他的实用同步组件.Doug Lea在构建锁和组件的时候,大多是以队列同步器(AbstractQueuedSynchronizer)为基础的,因此AbstractQueuedSynchronizer可以看作是并发包的基础框架.因此掌握了AbstractQueuedSynchronizer的实现原理,也就掌握了大多数并发组件的实现原理. AbstractQueuedSync

Java显式锁学习总结之五:ReentrantReadWriteLock源码分析

概述 我们在介绍AbstractQueuedSynchronizer的时候介绍过,AQS支持独占式同步状态获取/释放.共享式同步状态获取/释放两种模式,对应的典型应用分别是ReentrantLock和Semaphore,AQS还可以混合两种模式使用,读写锁ReentrantReadWriteLock就是如此. 设想以下情景:我们在系统中有一个多线程访问的缓存,多个线程都可以对缓存进行读或写操作,但是读操作远远多于写操作,要求写操作要线程安全,且写操作执行完成要求对当前的所有读操作马上可见. 分析