Timeout接口
跳转到Timeout接口描述文字部分,下面有三个常见的接口。
implicitlyWait(long time, TimeUnit unit);
setScriptTimeout(long time, TimeUnit unit);
pageLoadTimeout(long time, TimeUnit unit);
先看看implicitlyWait(),这个在前面介绍过了,叫隐式时间等待。我们来看看这个接口的描述部分,大致意思是:隐式时间等待是在查找元素的时候,设置一个最大时间值,如果driver第一次没有找到网页元素,那么就继续找,直到消耗了设置的最大时间值,还是没有找到,那么就抛出没有找到元素的异常。如果在设置时间范围内就找到了该元素,那么就执行下一行代码,不需要再等时间,这就是隐式等待的含义。所以,隐式时间等待一般结合查找网页元素一起。
setScriptTimeout(),作用是,在设置规定的时间内,等待异步脚本的执行结束,而不是里面抛出错误。这个在执行javascript脚本的时候可能会使用,后面我们介绍了使用Javascript脚本执行Selenium相关操作后在介绍具体使用方法。
pageLoadTimeout(),字面意思就网页加载超时,作用就是在设置规定时间内,等待网页完整加载完成,而不是里面抛出错误。我们知道如果网速慢,或者网页元素太多,例如网页做了大面积渲染,肯定会造成网页加载速度变慢。这个接口的作用就是,来处理这类问题的。从这个角度来看,我们前面的脚本中设置时间等待的语句应该换成这个语句更合适一些,毕竟我们的目的就是等待网页加载完成。
这里用pageLoadTimeout()举例一个打开百度和打开国外站点的例子,百度首页打开设置2秒,国外站点(icloud.com)打开设置1秒,由于中国大陆访问国外网站速度肯定慢,所以会报超时错误。
=============================================================================================================
timeout接口有以下三种常用的接口。
implicitlyWait():隐式时间等待是在查找元素的时候,设置一个最大时间值,如果driver第一次没有找到网页元素,那么就继续找,直到消耗了设置的最大时间值,还是没有找到,那么就抛出没有找到元素的异常。如果在设置时间范围内就找到了该元素,那么就执行下一行代码,不需要再等时间,这就是隐式等待的含义。所以,隐式时间等待一般结合查找网页元素一起。
setScriptTimeout(),作用是,在设置规定的时间内,等待异步脚本的执行结束,而不是里面抛出错误。这个在执行javascript脚本的时候可能会使用。
pageLoadTimeout(),字面意思就网页加载超时,作用就是在设置规定时间内,等待网页完整加载完成,而不是里面抛出错误。我们知道如果网速慢,或者网页元素太多,例如网页做了大面积渲染,肯定会造成网页加载速度变慢。这个接口的作用就是,来处理这类问题的。
注意使用timeouts()接口时不要忘记导入接口包:
import java.util.concurrent.TimeUnit;
=============================================================================================================================
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
================================================================================================================================
相关脚本代码如下:
package lessons; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PageLoadTest { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //System.setProperty("webdriver.gecko.driver", ".\\Tools\\geckodriver.exe"); WebDriver driver = new ChromeDriver(); //WebDriver driver = new FirefoxDriver(); driver.manage().window().maximize(); driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS); driver.get("https://www.icloud.com/"); } }
package lessons; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class FindElements { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get("https://news.baidu.com"); driver.findElement(By.id("kw")).sendKeys("Selenium"); driver.findElement(By.id("su")).click(); } }
Java+Selenium——Timeout接口相关方法介绍
原文:https://www.cnblogs.com/xiaobaibailongma/p/12219310.html