(java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待
selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待
本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作;
import java.util.Set;
import java.util.concurrent.TimeUnit; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait; /**
* 方法3,隐式等待,隐式等待相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。
* 隐式等待使得WebDriver在查找一个Element或者Element数组时,每隔一段特定的时间就会轮询一次DOM,
* 如果Element或数组没有马上被发现的话。默认设置是0。一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。一劳永逸。
* ********
* 方法1,强制等待,固定休眠时间设置,Java的Thread类里提供了休眠方法sleep,导入包后就能使用,
* 执行到此时不管什么就固定的等待5秒之后再接着执行后面的操作
* ********
* 方法2,显式等待,在0-10s中去定位id为“su”的元素,WebDriverWait默认每500ms就调用一次ExpectedCondition
* 直到定位成功或者时间截止,ExpectedCondition的返回值要么为true要么为不为空的对象,
* 在规定时间内若没有定位成功元素,则until()会抛出org.openqa.selenium.TimeoutException 。*/ public class YsfTest_20180726{
private static final int ExpectedCondition = 0;
private static final int Boolean = 0; public static void main(String[] args) throws InterruptedException{
WebElement search = null;
System.setProperty("webdriver.chrome.driver","C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe");
WebDriver driver = new ChromeDriver();
//方法3,隐式等待,implicitlyWait()方法比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待,称为隐式等待
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://www.baidu.com/");
//窗口最大化
driver.manage().window().maximize();
//定位所搜框,并输入电影
driver.findElement(By.cssSelector("#kw")).sendKeys("电影");
//方法1,强制等待,固定休眠时间设置,sleep()方法以毫秒为单位 ,此类为设置5s等待
Thread.sleep(5000);
//定位百度一下按钮
WebElement searchButton = driver.findElement(By.cssSelector("#su"));
//点击百度一下
searchButton.submit();
//获得当前窗口url
String parentUrl = driver.getCurrentUrl();
System.out.println("currenturl:"+parentUrl);
//获取搜索navigate窗口
driver.navigate().to("https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=navigate");
//方法2,显式等待
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>(){
public Boolean apply(WebDriver d){
return d.getTitle().toLowerCase().startsWith("navigate");
}
});
//获得当前窗口url
String parentUrl2 = driver.getCurrentUrl();
System.out.println("currenturl:"+parentUrl2);
//刷新页面
driver.navigate().refresh();
//后退到百度首页
driver.navigate().back();
//方法2,显式等待,在规定时间内等待 在10秒的范围内 出现.red_box元素就往下执行,如果10秒过后还没出现就跳出
WebElement element = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("su")));
//前进到搜索navigate窗口
driver.navigate().forward();
driver.close();
} }
注意,如果显式等待搜索的内容不存在,则会跑出异常;
(java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待的更多相关文章
- SuperDiamond在JAVA项目中的三种应用方法实践总结
SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...
- java数组中的三种排序方法中的冒泡排序方法
我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...
- Java中Map的三种遍历方法
Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历. 告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...
- java实现定时任务的三种实现方法
转载于:https://blog.csdn.net/haorengoodman/article/details/23281343/ /** * 普通thread * 这是最常见的,创建一个thread ...
- Java实现定时任务的三种简单方法
第一种方法: /** * 先定义一个任务每天执行的时间点,再写一个死循环,不断地拿当前时间和事先定义的时间去比对,若到时间则执行任务 */ @Test public void test1() { St ...
- selenium webdriver 的三种等待方式
1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码. from selenium import webdriver from selenium.webdriver ...
- 【Java】List的三种遍历方法
public void List_Test(){ List<String>list = new ArrayList<String>(); for(int i = 0;i < ...
- 【java】StringBuilder的三种清除方法对比
参考链接:https://blog.csdn.net/roserose0002/article/details/6972391
- Matlab:高阶常微分三种边界条件的特殊解法(隐式Euler)
函数文件1: function b=F(f,x0,u,h) b(1,1)=x0(1)-h*x0(2)-u(1); b(2,1)=x0(2)+h*x0(1)^2-u(2)-h*f; 函数文件2: fun ...
随机推荐
- php_mvc实现步骤八
shop34-10-框架类 框架类(框架初始化类) 将原来入口文件中功能,放在该类中完成,入口文件变得简单,轻量! 将入口文件中的各个功能,由框架类的各个方法,完成: 为了简单化,使用纯静态的类.(看 ...
- 深度解析qml引擎---(2)绑定(binding)
强烈的希望是人生中比任何欢乐更大的兴奋剂.--尼采 上一篇文章讲了QML引擎加载qml文件的过程,大体过程是,解析qml文件,然后为文件中的每个元素创建对应的c++对象.例如,qml文件中如果使用了T ...
- AR*客户地点分配OU
DECLARE p_cust_acct_site_rec hz_cust_account_site_v2pub.cust_acct_site_rec_type; p_cust_site_use_rec ...
- Prometheus入门到放弃(6)之AlertManager进阶
前面几个篇幅,我们介绍了alertmanger报警配置,在实际运维过程中,我们都会遇到,报警的重复发送,以及报警信息关联性报警.接下来我们就介绍下通过alertmanger对告警信息的收敛.一.告警分 ...
- learning、trying、teaching
在工作中学习和提升,学以致用,学习的效果是最好的:工作后学习不需要大段时间,而是要挤出时间,利用时间碎片来学习. 1,Learning 这是第一阶段,看书.google.看视频.看别人的博客,但要是“ ...
- Java开发笔记(一百零七)URL地址的组成格式
URL的全称是Uniform Resource Locator,意思是统一资源定位符,俗称网络地址或网址.网络上的每个文件及接口,都有对应的URL网址,它规定了其他设备如何通过一系列的路径找到自己,犹 ...
- tkinter学习笔记_03
6.单选框 Radiobutton import tkinter as tk root = tk.Tk() root.title("xxx") root.geometry('2 ...
- dubbo线程池的拒绝策略
jdk自带的原生的拒绝策略抛出的异常信息不够详细,而dubbo对拒绝策略进行了改写,抛出的信息更具有参考价值,值得我们借鉴. jdk自带的原生拒绝策略抛出的信息: // ThreadPoolExecu ...
- 【转载】C#中使用List集合的Insert方法在指定位置插入数据
在C#的List集合等数据类型变量中,我们可以使用List集合的Insert方法在指定的索引位置插入一个新数据,例如指定在List集合的第一个位置写入一个新数据或者在List集合的中间某个位置插入个新 ...
- 下载css-loader 安装及使用
1.通过require的方式来引入css,我们来看具体的方法,首先需要安装css-loader, style-loader(安装style-loader的目的是为了在html中以style的方式嵌入c ...