在调试代码的时候经常会遇到,selenium元素定位有时有效有时无效,先比较下
Selenium显示等待和隐式等待的区别
1、selenium的显示等待
原理:显示等待,就是明确的要等到某个元素的出现,等不到就一直等,除非在规定的时间之内都没找到,那么就跳出Exception
(简而言之,就是直到元素出现才去操作,如果超时则报异常)
2、selenium的隐式等待
原理:隐式等待,就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。
注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部不断的刷新页面去寻找我们需要的元素
3、笨方法等待
使当前线程进入等待,Thread.sleep();这种等待属于死等,很容易让线程挂掉,使程序抛异常,所以要慎用此方法
综上使用显示等待的方式比较保险:
Java显式等待使用的是WebDriverWait+ExpectedConditions,使用方式如下:

new WebDriverWait(driver,10).until(
ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator")));

代码如下:
pom.xml 同上一篇配置,只需修改testng文件路径即可:

<suiteXmlFile>res/testng3.xml</suiteXmlFile>

testng.xml 文件如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite3"><test name="百度搜索"><classes><class name="com.test.practice.maventest.BaidDuSearch" /><class name="com.test.practice.maventest.TestBaiDu" /></classes></test>
</suite>

创建公共类BasePage

package com.test.practice.maventest;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/*** @author:lucy* @date:2018年9月18日* @Description: 处理页面元素公共类,重写页面操作事件,为每个元素加入显式等待*/
public class BasePage {WebDriver webDriver;private final int timeOut = 10;public BasePage(WebDriver webDriver) {// TODO Auto-generated constructor stubthis.webDriver = webDriver;}public void sendkeys(WebElement wElement, String s) {// 加入显式等待new WebDriverWait(webDriver, timeOut).until(ExpectedConditions.visibilityOf(wElement));wElement.clear();// 清空输入框wElement.sendKeys(s);// 输入数据}public void click(WebElement wElement) {// 加入显式等待new WebDriverWait(webDriver, timeOut).until(ExpectedConditions.visibilityOf(wElement));wElement.click();//}
}

创建BaidDuSearch类

package com.test.practice.maventest;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
/*** @author:lucy* @date:2018年9月18日* @Description: 百度页面,对象定位和操作,继承BasePage*/
public class BaidDuSearch extends BasePage {public BaidDuSearch(WebDriver webDriver) {super(webDriver);// TODO Auto-generated constructor stub}//定位输入框 @FindBy(id ="kw")private WebElement kw_Element;
//  定位搜索按钮@FindBy(id ="su")private WebElement su_Element;//输入关键字public void kw_sendkeys(String s) {this.sendkeys(kw_Element, s);}//点击搜索public void su_click() {this.click(su_Element);}
}

创建测试类TestBaiDu,

package com.test.practice.maventest;
import org.testng.annotations.Test;
import junit.framework.Assert;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
/*** @author:lucy* @date:2018年9月18日* @Description: 测试百度搜索*/
public class TestBaiDu {private WebDriver driver;@BeforeClasspublic void beforeClass() {System.setProperty("webdriver.firefox.marionette", "D:\\selenium\\geckodriver-v0.21.0-win64\\geckodriver.exe");driver = new FirefoxDriver();System.out.println("执行BeforeClass");}@Testpublic void Baidu_Search() {BaidDuSearch bSearch = PageFactory.initElements(driver, BaidDuSearch.class);driver.get("https://www.baidu.com");driver.manage().window().maximize();// 窗口最大化bSearch.kw_sendkeys("软件测试");bSearch.su_click();}@Testpublic void f2() {Assert.assertEquals("abc", "abc");}@AfterMethodpublic void close() {System.out.println("执行AfterMethod");}}

run as》maven test:
最后运行结果报告如下:

tips:
遇到问题,执行测试时,一直报
org.apache.maven.surefire.booter.SurefireExecutionException: Cannot instantiate class com.test.practice.maventest.TestBaiDu; nested exception is org.testng.TestNGException: Cannot instantiate class com.test.practice.maventest.TestBaiDu错误,通过重新初始化浏览器驱动,解决改该问题,代码如下:

System.setProperty("webdriver.firefox.marionette", "D:\\selenium\\geckodriver-v0.21.0-win64\\geckodriver.exe");

Selenium显示等待和隐式等待相关推荐

  1. python显示等待和隐式等待_荐selenium内的隐式等待和显示等待的区别

    selenium的页面等待有显示等待和隐式等待 大多数Web应用程序都是使用Ajax和Javascript开发的.当浏览器加载页面时,我们想要与之交互的元素可能以不同的时间间隔加载. 它不仅难以识别元 ...

  2. selenium 的显示等待与隐式等待

    现在很多的网页都采用了 Ajax 技术,那么采用一般的静态爬虫技术会出现抓取不到页面的元素.比如歌曲的主页会有评论数量,一般评论数量是动态加载的. 所以这就涉及到selenium,支持各种浏览器,包括 ...

  3. Selenium的显示等待和隐式等待

    Selenium的显示等待和隐式等待 隐式等待 当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或 ...

  4. selenium中的三种等待方式以及显示等待和隐式等待区别

    selenium的三种等待方式 selenium中一般分为三种等待方式:显示等待.隐式等待.sleep强制等待 1.显示等待(有条件) 程序提前指定等待条件和等待时间,在查找元素时,判断规定时间内是否 ...

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

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

  6. selenium的三种等待方式(显示等待,隐式等待,强制等待)简单了解与总结

    1.强制等待(无条件等待) 使用方法:time.sleep(delay) delay的单位为秒,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法 ...

  7. python selenium 中显示等待与隐式等待同时存在,发生冲突时,解决方法

    当我们在一个基类中写了一句隐式等待,如下面的 self.driver.implicitly_wait(30) 可以为整个程序都设置一个30秒的等待时间,但是当我们有段代码不想等待30秒这么久,那该怎么 ...

  8. selenium中强制等待,隐式等待,显示等待的区别

    1.强制等待:time.sleep() 最简单的等待方式,缺点:设置时间短了没用,长了又浪费时间 2.隐式等待: 隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10 秒内出现,则继续向下, ...

  9. Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行.我们可以通过在 ...

最新文章

  1. python包管理器修改镜像地址
  2. 封神系统-运维大脑的日志检测
  3. codeforces CF986C AND Graph 建圖 dfs
  4. 送6个Gmail邀请!
  5. 数据分析从入门到进阶,35本包邮送到家
  6. 新零售做好客流数据分析才是提升线下商场、购物中心人流量的方向
  7. 《道德经》「人法地 地法天 天法道 道法自然」
  8. Win10 系统C盘 容量变大,如何清理,亲测有效
  9. airflow的xcom使用
  10. 搭建运营工单数据分析系统
  11. 三星S10系列相关参数对比,S10e/S10/S10+/S10 5G
  12. RoboMaster视觉教程(8)串口通讯
  13. webrtc学习笔记二:webrtc介绍
  14. Linux系统管理上机作业1
  15. 【华人学者风采】刘欢 亚利桑那州立大学
  16. 上传本地.xlsx(.xls)文件,实现页面表格数据预览
  17. 优酷路由宝增加php,优酷路由宝旗舰版YK-L2刷改华硕[N14U N54U]5G 2G的7620老毛子Padavan固件方法...
  18. Blackberry8820进攻心得
  19. 树莓派+神经计算棒2部署Openvino的human_pose_estimation_demo实例
  20. gnuradio的安装以及安装常见错误

热门文章

  1. mac游戏排行榜,mac好玩的游戏推荐 (一)
  2. python控制苹果手机触摸屏失灵怎么办_苹果手机触摸屏失灵了,怎么解决?
  3. 手机屏幕按键测试软件,涨见识了——手机居然能作为维修检测工具来用!
  4. python不显示边框_python设置表格边框的具体方法
  5. 零信任的过去、现在和未来
  6. 行测-判断推理-图形推理-样式规律-黑白运算
  7. 3. Kubernetes资源-概述
  8. SATA电源线的作用
  9. Cy5 COOH非活性染料溶于有机溶剂1032678-07-1 科研
  10. 面试后HR让你等通知的真相