java selenium一一超时设置

  • 前言
  • 1、显式等待
  • 2、隐式等待
  • 3、流利等待

前言

在使用selenium中我们遇到了,有时候一个点击查询或者其它操作需要加载等待很长的时间,我的程序就会等待一直到超时,
用户指示浏览器导航到一个页面,然后在试图查找元素时得到一个 no such element 的错误。
或者需要等待这一步骤执行完成后才能执行下一步,就需要设置超时等待了。

1、显式等待

显示等待 是Selenium客户可以使用的命令式过程语言。它们允许您的代码暂停程序执行,或冻结线程,直到满足通过的 条件 。
这个条件会以一定的频率一直被调用,直到等待超时。这意味着只要条件返回一个假值,它就会一直尝试和等待。
也就是说:暂停程序执行,直到在规定时间内找到某个元素或满足条件才会执行下一步,否则在规定时间没有直到元素会引发的 no such element 的错误。
类似线程等待,不推荐。


// 1.第一种
// 设置在抛出错误之前等待页面加载完成的时间。如果超时为负,页面加载可以是无限期的。
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);// 2.第二种
WebDriver driver = new ChromeDriver();
driver.get("https://google.com/ncr");
driver.findElement(By.name("q")).sendKeys("cheese" + Keys.ENTER);
// 初始化并等待直到元素(链接)变成可点击的-在10秒内超时
WebElement firstResult = new WebDriverWait(driver, Duration.ofSeconds(10))// ExpectedConditions 用法详见底部文档链接,elementToBeClickable --> 表示该元素是否可点击.until(ExpectedConditions.elementToBeClickable(By.xpath("//a/h3")));
// 打印结果
System.out.println(firstResult.getText());// 3.第三种
// 直接睡眠,等程序执行完成后再执行下一步
Thread.sleep(10);

2、隐式等待

还有第二种区别于显示等待 类型的 隐式等待 。通过隐式等待,WebDriver在试图查找_任何_元素时在一定时间内轮询DOM。
当网页上的某些元素不是立即可用并且需要一些时间来加载时是很有用的。
默认情况下隐式等待元素出现是禁用的,它需要在单个会话的基础上手动启用。将显式等待和隐式等待混合在一起会导致意想不到的结果,
就是说即使元素可用或条件为真也要等待睡眠的最长时间。
警告: 不要混合使用隐式和显式等待。这样做会导致不可预测的等待时间。例如,将隐式等待设置为10秒,将显式等待设置为15秒,
可能会导致在20秒后发生超时。
隐式等待是告诉WebDriver如果在查找一个或多个不是立即可用的元素时轮询DOM一段时间。默认设置为0,表示禁用。
一旦设置好,隐式等待就被设置为会话的生命周期。

WebDriver driver = new FirefoxDriver();
// 隐式等待
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));

也就是说:在10秒内找到对象了就继续往下执行,如果没有找到就轮训继续寻找对象,没有找到就引发 no such element 的错误。推荐使用。

3、流利等待

流畅等待实例定义了等待条件的最大时间量和检查频率。用户可以配置等待来忽略等待时出现的特定类型的异常,例如出现的NoSuchElementException。
类似于自定义等待,代码示例:

// 等待30秒,每5秒执行一次,等待页面上出现一个元素,并检查
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).withTimeout(Duration.ofSeconds(30)).pollingEvery(Duration.ofSeconds(5)).ignoring(NoSuchElementException.class);WebElement foo = wait.until(new Function<WebDriver, WebElement>() {public WebElement apply(WebDriver driver) {return driver.findElement(By.id("foo"));}
});

【参考】:selenium document,selenium ExpectedConditions

java selenium一一等待超时设置相关推荐

  1. java selenium一一操作定位元素

    java selenium操作定位元素 1.元素选择策略 1.1.使用选择器的提示 2.定位元素 3.定位多个元素 4.相对定位 4.1.above() 1.元素选择策略 WebDriver 中有 8 ...

  2. Java selenium和python_c#和Java和python设置selenium超时时间

    c# //设置页面加载超时时间 this.driver.Manage().Timeouts().PageLoad.Seconds.Equals(TimeSpan.FromSeconds(300)); ...

  3. ajax谷歌浏览器提示等待超时,调用谷歌浏览器爬虫,selenium webdriver等设置等待时间和超时时间...

    selenium webdriver超时设置分三类 pageLoadTimeout,setScriptTimeout,implicitlyWait 1.  pageLoadTimeout: pageL ...

  4. Selenium最全超时等待问题的处理方案

    Selenium广泛应用于自动化测试和自动化业务开发,同时在网络爬虫中也有较多的应用,使用Selenium有两个核心的问题:第一个是如何在爬虫领域不被识别出来,另一个是在自动化领域如何解决超时加载的问 ...

  5. java setsotimeout_HttpClient超时设置setConnectionTimeout和setSoTimeout

    http是基于TCP/IP进行通信的,tcp通过3次握手建立连接,并最终以4次挥手终止通信. 知乎上对三次握手和四次挥手有如下解释: 作者:知乎用户 链接:https://www.zhihu.com/ ...

  6. java 设置超时_java线程超时设置方法

    对于java中线程超时间可以使用ExecutorService与Timer来控制一个线程什么时候超时了,下面我整理了一些方法,这些文章都详细的介绍java线程超时设置技巧. 方法一 本例子使用Exec ...

  7. nginx中的超时设置,请求超时、响应等待超时等

    nginx比较强大,可以针对单个域名请求做出单个连接超时的配置. 比如些动态解释和静态解释可以根据业务的需求配置 proxy_connect_timeout :后端服务器连接的超时时间_发起握手等候响 ...

  8. Java中httpClient中的设置超时时间

    HttpClient mHttpClient = new DefaultHttpClient();/*** *********************设置超时********************* ...

  9. Selenium 显示等待、隐式等待及流畅等待

    目录 等待 显式等待 选项 预期的条件 隐式等待 流畅等待 等待 WebDriver通常可以说有一个阻塞API.因为它是一个指示浏览器做什么的进程外库,而且web平台本质上是异步的,所以WebDriv ...

最新文章

  1. 判断出栈顺序是否正确(栈的压入、弹出序列)
  2. 20145223《信息安全系统设计》 实验四 驱动程序设计
  3. python写一个表白程序-用Python写一个表白神器让你脱单
  4. 5y计算机应用基础题库,数学log练习题和答案.doc
  5. h5 storage事件监听
  6. 5.1 vim介绍 5.2-5.3 vim颜色显示和移动光标、vim一般模式下移动光标 5.4 vim 一般模式下复制剪切粘贴...
  7. 怎样启用win7的超级管理员账户
  8. 毕业设计 嵌入式超声波雷达可视化系统
  9. 银联卡跨行业务地区代码标准JSON版
  10. 监控服务器系统密码忘了怎么办,监控服务器系统配置密码
  11. 网页播放rtsp视频流最终方案
  12. Xcelsius调用Webservice实例
  13. FMAN(Fully Motion-Aware Network for Video Object Detection)论文详读
  14. cuda C++ cuFloatComplex/cufftComplex/复数 exp
  15. 【Selenium自动化测试】鼠标与键盘操作
  16. Git 报错 error: pathspec ‘XXX‘ did not match any file(s) known to git 报错解决方法
  17. 树莓派4B的引脚控制简单demo
  18. Days3.Javascript学习
  19. YOLOV5检测代码detect.py注释与解析
  20. 大厂最后一面,如何设计一个秒杀系统

热门文章

  1. android uyghur app,‎App Store 上的“Uyghur Quran And Translation”
  2. fread 快速读入
  3. Tcp为什么是4次挥手呢?为什么是3次握手,不能是3次挥手呢?
  4. 【SpringBoot】 日志框架冲突
  5. Probability and Stochastic Models(1) —— 研一新课学习笔记
  6. Linux 用户管理及用户权限设置
  7. 计算机编程ebcdic码,EBCDIC和BCD码
  8. Kali-WIFI攻防(二)----无线网络分析工具Aircrack-ng
  9. 关于Linux的视频编程(v4l2编程)
  10. JAVA、PHP身份证、统一社会信用代码算法解析验证