我们经常会碰到用selenium操作页面上某个元素的时候,需要等待页面加载完成后,才能操作, 否则页面上的元素不存在,会抛出异常。

或者碰到AJAX异步加载,我们需要等待元素加载完成后,才能操作。

首先来讲,我们最不推荐的就是使用  Thread.sleep( ) ;  这个也叫做线程休眠。

这种写法通常是固定了一个时间,然而我们不知道页面具体的等待情况,有快有慢,虽然很百搭,但是并不适用于框架中。

selenium 中提供了非常简单,智能的方法,来判断元素是否存在。我来简单的举例说明几种(在我使用的过程中,我会逐步添加到这里)

阅读目录ctrl+F,根据自己所需来搜索查看吧)

  1. 实例要求
  2. 隐式等待
  3. 显式等待

实例要求

实例:set_timeout.html

下面的html 代码, 实现的是点击click 按钮5秒后, 页面上会出现一个红色的div快, 我们需要写一段自动化脚本智能的去判断这个div是否存在, 然后把这个div高亮。

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<title>Set Timeout</title>
<style>
.red_box {background-color: red; width:20%; height: 100px; border: none;}
</style>
<script>
function show_div(){
setTimeout("create_div()", 5000);
} function create_div(){
d = document.createElement('div');
d.className = "red_box";
document.body.appendChild(d);
}
</script>
</head>
<body>
<button id = "b" onclick = "show_div()">click</button>
</body>
</html>

隐式等待

通常,我们会这么写

 WebDriver driver = new FirefoxDriver();
driver.get("file:///C:/Users/Tank/Desktop/set_timeout.html"); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
WebElement element = driver.findElement(By.cssSelector(".red_box"));
((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);

其中

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

意思是, 总共等待10秒, 如果10秒后,元素还不存在,就会抛出异常  org.openqa.selenium.NoSuchElementException。

换句话说,当元素没有立即出现,隐式等待将等待一段时间再查找。

一旦设置了隐式等待,则会存在整个WebDriver对象实例的声明周期中,它将寻找每个元素的时候都进行等待,增加整个测试执行的时间。

即针对全局设置的,webdriver中执行所有命令的超时时间都设置为10秒了。

显式等待

显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间或条件之内都没找到,那么就跳出Exception.

一般使用ExpectedConditions类中自带方法,点击查看API页

显式等待可以自定义等待的条件,用于更加复杂的页面等待条件

等待的条件

WebDriver方法

页面元素是否在页面上可用和可被单击

elementToBeClickable(By locator)

页面元素处于被选中状态

elementToBeSelected(WebElement element)

页面元素在页面中存在

presenceOfElementLocated(By locator)

在页面元素中是否包含特定的文本

textToBePresentInElement(By locator)

页面元素值

textToBePresentInElementValue(By locator, java.lang.String text)

标题 (title)

titleContains(java.lang.String title)

只有满足显式等待的条件满足,测试代码才会继续向后执行后续的测试逻辑

如果超过设定的最大显式等待时间阈值, 测试程序会抛出异常。

     public static void testWait2(WebDriver driver) {
driver.get("file:///C:/Users/Ice/Desktop/set_timeout.html"); WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box")));
WebElement element = driver.findElement(By.cssSelector(".red_box"));
((JavascriptExecutor) driver).executeScript("arguments[0].style.border = \"5px solid yellow\"", element);
}

以上就是对Java selenium 等待页面加载的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

关于selenium的智能等待页面加载的问题的更多相关文章

  1. java selenium (十三) 智能等待页面加载完成

    我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作.  否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操 ...

  2. Java Selenium (十二) 操作弹出窗口 & 智能等待页面加载完成 & 处理 Iframe 中的元素

    一.操作弹出窗口   原理 在代码里, 通过 Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄, 然 ...

  3. selenium 等待页面加载完成

    一.隐形加载等待: file:///C:/Users/leixiaoj/Desktop/test.html 该页面负责创建一个div <html> <head> <tit ...

  4. selenium+python登录登出百度,等待页面加载,鼠标定位

    #coding:gbk from selenium import webdriver from selenium.webdriver.common.keys import Keys from sele ...

  5. selenium等待页面加载完成

    https://blog.csdn.net/hu_zhenghui/article/details/77429505 38行      这种方法 不准确   还在空白页时候   就会 返回  comp ...

  6. Selenium_等待页面加载完毕

    隐式等待 WebDriver driver = new FirefoxDriver(); driver.get("www.baidu.com"); driver.manage(). ...

  7. 一个等待页面加载完毕的loading动画

    1 html 部分 <!DOCTYPE html><html><head><meta http-equiv="Content-Type" ...

  8. [转载]Python & Selenium -- 页面加载时间过长&启动指定FF

    原文链接:https://my.oschina.net/u/2344787/blog/400507?p={{page}} 1. selenium webdriver在get方法会一直等待页面加载完毕才 ...

  9. Selenium 页面加载慢

    Selenium 页面加载慢 问题描述: 使用Selenium获取网页,发现webdriver.get方法会阻塞直到网页全部加载完成,官方提供的三种wait方法仅对网页的ajax有比较明显的效果.对于 ...

随机推荐

  1. 绕过CDN查找网站真实IP方法收集

    方法1很简单,使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一多半是使用了CDN, 多地 Ping 网站有: http://ping.chinaz.com/ http://pi ...

  2. 第二次作业 APP分析

    第一部分 调研, 评测 1.下载软件并使用. 今天我要分析的软件app是UC浏览器这个软件,UC浏览器的用户群体还是挺多的,作为一款主流之一的浏览器APP,整体的用户体验还是很好的.简洁的界面还有中间 ...

  3. Extjs TreePanel API详解

    转自:http://web.qhwins.com/CSS-JS-XML/2011091312092944999107.html config定义{ animate : Boolean, contain ...

  4. 微软YY公开课[《微软中国云计算Azure平台体验与新企业架构设计》 周六晚9点

    YY频道是 52545291//@_勤_: YY账号真的是一次一账号啊! 全然记不得之前注冊的//@老徐FrankXuLei: 最火爆的微软免费公开课.第一次顶峰126人.第二次96人.第三次我们又来 ...

  5. BZOJ3514:GERALD07加强版(LCT,主席树)

    Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密. 接下来 ...

  6. Day17 多线程编程

    基本概念 进程:内存中正则运行的一个应用程序.一个进程包含多个线程. 线程:进程中的一个执行流程. 多线程:有两个或两个以上的并发执行流程. 线程的声明周期 说明: 1. 新建状态(New)      ...

  7. pagination分页(支持首页,末页,跳转)

    最近在用jq做分页,大致的效果如下: jquery.pagination.js插件说明 用法如下: 1.引入jq.jquery.pagination.js.pagination.css 2.在页面上写 ...

  8. openvpn-在Linux中安装和配置OpenVPN Server的最简便方法!(转)

    在Linux中安装和配置OpenVPN Server 出于本文的需要,我将使用两个运行CentOS 7 64位版本的系统.一个充当OpenVPN服务器,另一个充当OpenVPN客户机.下面是测试系统的 ...

  9. 404 Note Found队Beta3

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  10. pipeline 发布war包

    pipline 写法分为 脚本式和声明式,下面采用脚本式编程: node { stage('checkout') { echo '开始检出代码' checkout([$class: 'GitSCM', ...