博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium的三种等待时间
阅读量:4308 次
发布时间:2019-06-06

本文共 3237 字,大约阅读时间需要 10 分钟。

//隐式等待(20秒以内没哥一段时间就会去找元素,如果没找大也不会报错,过了20s才会报错)        //driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);        //显示等待        WebDriverWait wait = new WebDriverWait(driver,10);        wait.until(ExpectedConditions.presenceOfElementLocated(By.id("test")));
//线程等待   Thread.sleep(2000);

参考:https://www.cnblogs.com/linxinmeng/p/6930197.html

 

 

selenium自动化页面元素不存在异常发生的原因有一下几点:

(1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功。此时可以加载页面等待时间。

(2)查到的元素没有在当前的iframe或者frame中。此时需要切换至对应的iframe或者frame中才行。

 (3)元素错误。

解决页面加载时间所引起的元素找不到,我们可以为页面设置加载时间。时间的设置分为以下三种:

(1)显式等待

显示等待是针对于某个特定的元素设置的等待时间,如果在规定的时间范围内,没有找到元素,则会抛出异常,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作。

public static void main(String[] args) throws IOException {

System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");

ChromeOptions Options = new ChromeOptions();
Options.addArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data");
WebDriver driver = new ChromeDriver(Options);
try {

WebDriverWait wait = new WebDriverWait(driver, 10, 1);

// 每隔1秒去调用一下until中的函数,默认是0.5秒,如果等待10秒还没有找到元素 。则抛出异常。
wait.until(new ExpectedCondition<WebElement>() {

@Override

public WebElement apply(WebDriver driver) {
driver.findElement(By.id("kw"));

return driver.findElement(By.id("kw"));

}

}).sendKeys("我是一个自动化测试小脚本");

} finally {

driver.close();
Runtime.getRuntime().exec("taskkill /F /im " + "chromedriver.exe");
Runtime.getRuntime().exec("taskkill /F /im " + "chrome.exe");
}
}

(2)隐式等待

隐式等待是设置的全局等待,分为1、页面加载超时等待 ;2、页面元素加载超时;3、异步脚本超时

如果是页面元素超时,设置等待时间,是对页面中的所有元素设置加载时间。隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。

public static void main(String[] args) throws IOException {

System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");

ChromeOptions Options = new ChromeOptions();
Options.addArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data");
WebDriver driver = new ChromeDriver(Options);
try {
//页面加载超时时间设置为5s
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
driver.get("https://www.baidu.com/");
//定位对象时给10s 的时间, 如果10s 内还定位不到则抛出异常
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("kw")).sendKeys("隐式等待");
//异步脚本的超时时间设置成3s
driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);
} finally {
driver.close();
Runtime.getRuntime().exec("taskkill /F /im " + "chromedriver.exe");
Runtime.getRuntime().exec("taskkill /F /im " + "chrome.exe");
}
}

(3)线程等待

线程等待是java语言中的线程类Thread类中的sleep()方法。此等待是很死板的,需要等待时间结束才会执行相关代码。该方法需要抛出InterruptedException 异常。一般不建议使用,但是在弹窗处理,可以优先选择线程等待。

public static void main(String[] args) throws IOException, InterruptedException {

System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");

ChromeOptions Options = new ChromeOptions();
Options.addArguments("user-data-dir=C:\\Users\\happy\\AppData\\Local\\Google\\Chrome\\User Data");
WebDriver driver = new ChromeDriver(Options);
try {

Thread.sleep(5000);

driver.findElement(By.id("kw")).sendKeys("线程等待");
} finally {
driver.close();
Runtime.getRuntime().exec("taskkill /F /im " + "chromedriver.exe");
Runtime.getRuntime().exec("taskkill /F /im " + "chrome.exe");
}
}

转载于:https://www.cnblogs.com/tarrying/p/9681991.html

你可能感兴趣的文章
gitlab应用
查看>>
$Django importlib与dir知识,手写配置文件, 配置查找顺序 drf分页器&drf版本控制
查看>>
对layoutInflater的理解
查看>>
网络流之最大流问题
查看>>
【自己给自己题目做】之一:椭圆可点击区域
查看>>
Uva 1625 - Color Length(DP)
查看>>
练习2-1 Programming in C is fun!
查看>>
isset函数
查看>>
混合app
查看>>
centos下crontab的使用
查看>>
HTMLParser-实战
查看>>
分布式之缓存击穿
查看>>
从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?...
查看>>
$Poj1952\ $洛谷$1687\ Buy\ Low,Buy\ Lower$ 线性$DP+$方案计数
查看>>
linux文件夹打包命令
查看>>
运行cmd状态下MySQL导入导出.sql文件
查看>>
Hbase时间同步
查看>>
HBase1.0.0 实现数据增删查
查看>>
webpack4 入门配置研究
查看>>
if...else..的错误用法
查看>>