Selenium-等待
分为3种
(1)就是通过线程强制等待
Thread.sleep(1000);
(2)隐示等待。就是所有的命令都等待。分为3种
// 这个方法表示全局的等待。意思是针对所有的findElement方法都执行,执行过程是如果第一次找不到,那么每个500ms再去找,直到设定的时间结束;如果找到了就不等待,继续执行
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// 这个方法是针对网页加载的。意思是加载网页时,如果在设定的时间内加载成功了,继续执行;如果在设定的时间到了还没有加载成功再抛出异常。解决有的时候加载慢抛异常的情况。
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
// 针对执行的js脚本。意思是在设定的时间内等待脚本执行,如果设定的时间内脚本还没有执行成功再跑出异常。有的时候脚本执行很慢,没有执行完就跑出异常,这个方法可以设定时间。
driver.manage().timeouts().setScriptTimeout(60, TimeUnit.SECONDS);
(3)显式等待。针对特定的元素
- // 显示等待,针对某一个元素等待,每500ms执行一次查询,直到找到,如果在设定的时间内还没有找到,跑出异常
public void WaitUntil() { WebDriverWait wait=new WebDriverWait(driver, 10); WebElement rElement=wait.until(new ExpectedCondition<WebElement>() { public WebElement apply(WebDriver d) { return d.findElement(By.cssSelector("input[type='radio'][name='company']:checked")); } }); }
- 显式等待 使用ExpectedConditions类中自带方法, 可以进行显试等待的判断。
显式等待可以自定义等待的条件,用于更加复杂的页面等待条件
等待的条件 |
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("E:\\StashFolder\\huoli_28@hotmail.com\\Stash\\Tank-MoneyProject\\浦东软件园培训中心\\我的教材\\Selenium Webdriver\\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);
}
最新文章
- [网站性能2]Asp.net平台下网站性能调优的实战方案
- Objective-C歌词解析
- jenkins邮件通知功能
- 我的WafBypass之道
- .net的一些新语法的整理
- Oracle中Cursor的用法
- oracle-2-sql数据操作和查询
- Mac OS X 上的安装haskell开发环境
- ruby的hash学习笔记例: 将字符串文本中的单词存放在map中
- http://biancheng.dnbcw.info/java/138631.html
- PHPCMS搭建wap手机网站
- BZOJ1324: Exca王者之剑
- 单篇文章JS模拟分页
- Mongodb中Sharding集群
- iSlider手机平台JS滑动组件
- 【转】Eclipse 如何添加Android SDK
- Greedy分饼干
- 南京邮电大学java第四次实验报告
- 移动端解决单机事件延迟fastclick
- Lua用table模拟二维数组
热门文章
- VS(Visual Studio)自动创建的文件格式
- [TypeScript] Typescript Interfaces vs Aliases Union &; Intersection Types
- 使用JSONlib简单的转换json操作
- Winform 中tabcontrol 美化
- 【LCA最近公共祖先】在线离线
- Java数据类型转换问题
- Android-apktool-就从此处开始反编译之旅
- 【Python注意事项】如何理解python中间generator functions和yield表情
- LockWindowUpdate的函数的用法
- 封装QtCore(在非Qt项目里使用QString,QJson,QFileInfo,QFile等类)