webdriver有两种等待方式:显式等待和隐式等待

因为现在大部分的web应用程序会使用AJAX技术。AJAX技术简单来说就是异步JavaScript和xml,是一种用户创建快速动态网页的技术,AJAX可以使网页实现异步更新,也就是可以不重新加载整个网页的情况下,对网页部分进行更新。

也就是加载网页的时候,页面的元素可能并不是同时被加载,这就对页面元素的定位产生了一定的困难。有可能在定位元素的过程中,由于某个需要定位的元素没有及时加载出来,可能会报ElementNotVisibleException这种情况,会极大降低自动化脚本的稳定性,所以我们可以通过设置等待的方式,来改善这种情况。

一、显式等待

显式等待有两种:一种是强制等待:通过线程等待函数,让自动化测试做一定时间的等待,Thread.sleep(1000);

使用此方法会出现两种不能避免的情况:1.若设置的时间较短,仍不能解决上述问题;2.若设置时间较长,会花费大量的等待时间。我们很难去确定等待时间的长度,因为加载时间的长度会受到外部环境的影响,比如:网络情况,应用的大小,主机的配置情况,主机的内存和CPU的消耗情况。

二是 使webdriver等待某个条件成立(界面某元素出现或者某可点击等条件)时,继续执行后续的操作,否则时间达到最大限值之后就抛出异常。采用WebDriverWait类 + ExceptedConditions接口

笔者比较推荐的方式就是这种方式

ExpectedConditions类有很多方法,下面列出一些常用的方法

方法

说明

titleIs(String)

标题是不是“xxxx”

titleContains(String)

标题是不是包含“XXX”

presenceOfElementLocated(By)

判断该元素是否被加载在DOM中,并不代表该元素一定可见

visibilityOfElementLocated(By)

判断元素是否可见(非隐藏,并且元素的宽和高都不等以0)

visibilityOf(WebElement)

判断元素(定位后)是否可见

presenceOfAllElementsLocatedBy(By)

只要存在一个就是true

textToBePresentInElementLocated(By, String)

元素中的text是否包含预期的字符串

textToBePresentInElementValue(By, String)

元素的value属性中是否包含预期的字符串

frameToBeAvailableAndSwitchToIt(By)

判断该表单是否可以切过去,可以就切过去并返回true,否则返回false

invisibilityOfElementLocated(By)

判断某个元素是否不存在于DOM树或不可见

elementToBeClickable(By)

判断元素是否可见并且是可以点击的

stalenessOf(WebElement)

等到一个元素从DOM树中移除

elementToBeSelected(WebElement)

判断某个元素是否被选中,一般用在下拉列表

elementSelectionStateToBe(By, boolean)

判断某个元素的选中状态是否符合预期

elementSelectionStateToBe(WebElement, boolean)

与上一个方法一样,只是该方法参数为定位后的元素,上一个方法接收的参数为定位

判断某个元素(已定位)的选中状态是否符合预期

alertIsPresent()

判断页面中是否存在alert

二、隐式等待

相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。

隐式等待使得WebDriver在查找一个Element或者Element数组时,如果一直查找不到,每隔一段特定的时间就会轮询一次DOM。

注:默认设置超时时间为0,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。

隐式等待是通过一定的时长等待页面上某个元素加载完成。如果超过了设置的时长元素还没有被加载出来,则抛出NoSuchElementException异常。

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

代码中设置等待时间为10秒。首先这个10秒并非是一个固定的等待时间,它并不会影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将会以轮询的方式不断地判断元素是否被定位到。假设,第5秒等位到元素,就继续执行;但是如果超出设置的这个10秒,那就直接抛出异常

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.support.ui.ExpectedConditions;

import org.openqa.selenium.support.ui.WebDriverWait;

import org.openqa.selenium.By;

import bsh.This;

public class BasicScene {

WebDriver driver;

String name;

public BasicScene(WebDriver driver){

this.driver =driver;

this.name="888888";

}

public WebElement WaitUntilVisableEle(WebElement ele) {

WebDriverWait wait = new WebDriverWait(this.driver, 20);

wait.until(ExpectedConditions.visibilityOf(ele));

return ele;

}

public WebElement WaitUntilClickable(WebElement ele ) {

WebDriverWait wait = new WebDriverWait(this.driver,20);

wait.until(ExpectedConditions.elementToBeClickable(ele));

return ele;

}

public WebElement Waittobeclickable(By locator){

WebDriverWait wait = new WebDriverWait(driver, 10);

// locator:By.id("someid")

WebElement element =

wait.until(ExpectedConditions.elementToBeClickable(locator));

return element

}

}

转载自:https://blog.csdn.net/chen498858336/article/details/86383182

java 设置不可点击_Java Selenium webdriverwait 解决元素不可点击问题相关推荐

  1. python元素定位input button_python+selenium 定位到元素,无法点击的解决方法

    报错 selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75 ...

  2. java设置imageview图片大小_java – 在android中设置imageview

    我有一个JSON URL :: http://54.218.73.244:7006/DescriptionSortedRating/ JSON STRUCT :: "restaurants& ...

  3. 【Selenium】解决 无法模拟定位点击

    此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉. 本文章纯野生,无任何借鉴他人文章及抄袭等.坚持原创!! 前言 最近在利用Selenium做一些在浏览器上的自动 ...

  4. html,js 中如何屏蔽div子元素点击事件会触发父元素的点击事件($event.cancelBubble=true;)

    1. 第一种方法:html中屏蔽父元素的点击事件($event.cancelBubble=true;) <div (click)="select($event)"> & ...

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

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

  6. java模拟网易邮箱登录_java+selenium 实现网易邮箱登录功能

    今天学习selenium ,折腾了一整天,写个笔记记录一下今天的错误. 我用的是java+webdriver,在eclipse中运行,今天的学习是进行网易邮箱的登录功能.一开始代码运行一直报找不到元素 ...

  7. java设置pdf不可编辑_Java动态生成pdf文件(使用itext编辑pdf)

    一.创建pdf模板 使用PDFelement制作pdf模板(数据域的名称对应后面插入的key) 二.导入maven依赖 com.itextpdf itextpdf 5.5.13 com.itextpd ...

  8. java设置打印机默认纸张_java 打印设置打印A4 A5纸

    用java写了一个打印机,遇到打印纸张输出的问题,打印纸张有A4或者A5,当设置A5纸张的时候需要横向打印输出 下面贴出部分代码,用于解决当打印纸张为A5纸张时,文件横向打印 DocPrintJob ...

  9. java+标签定位_java+selenium——查找定位元素,elements复数定位(driver.findElementsByClassName(mnav);)002...

    elements复数定位: 在上面的例举的八中基本定位方式种,都有对应的复数形式,分别是下面这些: id复数定位find_elements_by_id() name复数定位find_elements_ ...

最新文章

  1. 人工智能实践:TensorFlow笔记学习(一)—— 人工智能概述
  2. cpu飙升 死循环_java排查一个线上死循环cpu暴涨的过程分析
  3. 二叉查找树的C语言实现(一)
  4. 【数据结构与算法】之深入解析“单词接龙II”的求解思路与算法示例
  5. 【NOIP必备攻略】 基本noilinux使用方法
  6. 前端图片canvas,file,blob,DataURL等格式转换
  7. gibmacos 网络加速_黑苹果教程续集,利用EFI在线安装MacOS
  8. python随机数据随概率分布_概率分布及其Python实现
  9. nextcloud icon_吉利ICON的提车日记,这是一个不错的选择
  10. 推荐专栏丨《DBA的奋斗路》
  11. SharePoint 2010的数据库服务器实例默认为sqlserver2
  12. CAKeyframeAnimation简单实用
  13. c语言ascii码16进制,C语言附录ASCII码表.doc
  14. BT下载4K电影、视频
  15. 控制pico—unity中双目摄像机的clearFlags问题
  16. 身心灵觉醒视频汇总【建议收藏】
  17. 华为鸿蒙OS正式发布!教你如何升级
  18. 禅道发信配置(网易企业邮箱)
  19. 让你效率飞起的右键工具——超级右键
  20. unity硬件接入(一)---Joystick

热门文章

  1. JS判断浏览器是否支持某一个CSS3属性
  2. linux系统上传下载命令rz和sz
  3. 常用控件 winform
  4. 窗体控件绑定泛型数组 0104 c#
  5. fastdfs-配合nginx-麻烦的
  6. django-路由进阶-01
  7. django-模型类关系-待整理
  8. python-运算符之算术运算符
  9. Android动态布局
  10. Hadoop Hive概念学习系列之hive的正则表达式初步(六)