在自动化测试过程当中,受网络、测试设备等诸多因素的影响,我们经常需要在自动化测试脚本中添加一些延时来更好的定位元素来进行一系列的操作。

一般有这么几种方式:

1.implicitlyWait。识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出NoSuchElement异常

2.setScriptTimeout。异步脚本的超时时间。webdriver 可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间。

3.pageLoadTimeout。页面加载时的超时时间。因为webdriver 会等页面加载完毕在进行后面的操作,所以如果页面在这个超时时间内没有加载完成,那么webdriver 就会抛出异常。

4.Thread.sleep()。这是一种挂起线程然后重新唤醒的方式,不建议使用,占用系统线程资源。

  1. package com.testngDemo;
  2.  
  3. import java.util.concurrent.TimeUnit;
  4.  
  5. import org.openqa.selenium.By;
  6. import org.openqa.selenium.NoSuchElementException;
  7. import org.openqa.selenium.WebDriver;
  8. import org.openqa.selenium.WebElement;
  9. import org.openqa.selenium.firefox.FirefoxDriver;
  10. import org.openqa.selenium.support.ui.ExpectedCondition;
  11. import org.openqa.selenium.support.ui.WebDriverWait;
  12.  
  13. public class Demo_TimeControl {
  14.  
  15. public static void main(String args[])
  16. {
  17. WebDriver driver=new FirefoxDriver();
  18. driver.get("http://www.baidu.com");
  19.  
  20. //设置延时操作
  21. driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);//-----页面加载时间
  22. driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//------元素等待时间(隐式等待)
  23. driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);//----脚本执行时间
  24. //显式等待
  25. WebElement e = (new WebDriverWait(driver, 10)) .until(
  26. new ExpectedCondition< WebElement>(){
  27. @Override
  28. public WebElement apply(WebDriver d) {
  29. return d.findElement(By.id("kw"));
  30. }
  31. }
  32. );
  33. }
  34. /**
  35. * 自定义显式等待
  36. * @param driver
  37. * @param by
  38. * @return
  39. */
  40. private static WebElement webelementExplicitWait(WebDriver driver,By by)
  41. {
  42. return (new WebDriverWait(driver, 10)) .until(
  43. new ExpectedCondition< WebElement>(){
  44. @Override
  45. public WebElement apply(WebDriver d) {
  46. return d.findElement(by);
  47. }
  48. }
  49. );
  50. }
  51. /**
  52. * 判断元素是否存在
  53. * @param driver
  54. * @param by
  55. * @return
  56. */
  57. private static boolean isPresentElement(WebDriver driver,By by)
  58. {
  59. try {
  60. driver.findElement(by);
  61. return true;
  62. } catch (NoSuchElementException e) {
  63. return false;
  64. }catch(Exception e){
  65. return false;
  66. }
  67. }
  68.  
  69. }

我们可以根据自己的需要来封装一些元素等待,元素查找的方法,像上面判断元素是否存在,如果查找不到就抛出异常,有的时候可能是抛错没有这样的元素,有的时候也可能是抛错元素不可见等错误,可以用Excpetion来捕获。

在timeout接口里就介绍了这前三种时间等待的方法,这里也不细加研究了。

再就是显式等待ExplicitWait,可以根据我们的需要判读在一个时间范围内这个元素是否能定位到,这个作用是比较大的,像上面的方法只是来整体的延时,到底能不能来定位到元素也不知道。但是我们也可以根据自己项目需要来对这些方法进行封装,使之更好的为我们服务。

WebDriver API——延时操作及元素等待的更多相关文章

  1. Webdriver API之操作(一)

    一. 控制浏览器 1. 控制浏览器大小 driver.set_window_size(480,800) #浏览器宽480,高800显示 dirver.maximize_window() #浏览器最大化 ...

  2. Webdriver API之操作(二)

    一.窗口截图 dirver.get_screenshot_as_file("D:\\report\\image\\xxx.jpg") 二.关闭窗口 dirver.close() # ...

  3. Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结

    由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...

  4. webdriver与JS操作浏览器元素

    1.JQuery的选择器实例 语法 描述 $(this) 当前 HTML 元素 $("p") 所有 <p> 元素 $("p.intro") 所有 c ...

  5. Appium(八):Appium API(二) 元素等待、元素操作

    1. 元素等待 我们在使用脚本的时候,可能会由于网络.服务器处理.电脑等原因,我们想要找的元素没有加载出来,这个时候如果直接定位就可能会报错. 这个时候我们就可以设置元素等待了. 什么叫元素等待呢? ...

  6. Selenium常用API的使用java语言之11-设置元素等待

    WebDriver提供了两种类型的等待:显式等待和隐式等待. 1.显示等待 WebDriver提供了显式等待方法,专门针对某个元素进行等待判断. import org.openqa.selenium. ...

  7. 抛弃jQuery:DOM API之操作元素

    原文链接:http://blog.garstasio.com/you-dont-need-jquery/dom-manipulation/ 我的Blog:http://cabbit.me/you-do ...

  8. Webdriver API之元素定位

    Webdriver提供了8种元素定位方法:id.name.class name.tag name.link text.partial link text.xpath.css selector 一.以上 ...

  9. selenium webdriver——设置元素等待

    如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...

随机推荐

  1. Codeforces Gym 100650C The Game of Efil 模拟+阅读题

    原题链接:http://codeforces.com/gym/100650/attachments/download/3269/20052006-acmicpc-east-central-north- ...

  2. 346. Moving Average from Data Stream

    /* * 346. Moving Average from Data Stream * 2016-7-11 by Mingyang * 这里注意的就是(double) sum / count * su ...

  3. Linux下挂载指定分区下的某个文件夹到指定目录(mount)

    # 挂载 mount --bind olddir newdir # 卸载 umount newdir 参考: http://www.cnblogs.com/dabaopku/archive/2010/ ...

  4. 谈Objective-C block的实现(转)

    前言 这里有关于block的5道测试题,建议你阅读本文之前先做一下测试. 先介绍一下什么是闭包.在wikipedia上,闭包的定义)是: In programming languages, a clo ...

  5. asyncTask 的execute和executeOnExecutor 方法

    asyncTask.execute Android.os.Build.VERSION_CODES.DONUT, this was changed to a pool of threads allowi ...

  6. php 的$_POST 和$_REQUEST的区别

    发现$_POST 没数据,而$_REQUEST 有数据 ----------------------------------------- https://stackoverflow.com/ques ...

  7. Cucumber+Rest Assured快速搭建api自动化测试平台

    转载:http://www.jianshu.com/p/6249f9a9e9c4 什么是Cucumber?什么是BDD?这里不细讲,不懂的直接查看官方:https://cucumber.io/ 什么是 ...

  8. [学习笔记]Java异常机制

    概述 异常 程序在执行时出现的不正常情况,是对问题的描写叙述.将问题进行对象的封装. Java中的异常,就是对不正常情况进行描写叙述后的对象体现. 异常体系 Throwable     |--Erro ...

  9. 【每日Scrum】第一天(4.11) TD学生助手Sprint1计划会议成果

    [每日Scrum]第一天  TD学生助手Sprint1计划会议成果 ——小组成员:刘铸辉 刘静 何晓楠 谢凤娇 胡宝月 王洪叶 初次尝试敏捷开发Scrum计划流程开发项目,有什么不对的地方还希望各位大 ...

  10. DB 【ACID】

    http://blog.csdn.net/shuaihj/article/details/14163713 http://blog.csdn.net/dief913975849/article/det ...