Selenium的几种等待方式:FluentWait,ImplicitlyWait,Sleep,Explicit wait

Explicit wait(显式等待)

【场景1:登录一个网站,输入用户名和密码后,点击登录,需要加载好几秒钟才能进入用户中心。例如你登录你网银,用户名和密码验证通过后,它需要等几秒,才能显示你账户信息,这几秒,它需要去数据库查询数据并显示在前端。

场景2:你登录一个旅行网站,填好了出发起点和目的地,点击搜索,需要查询等待几秒,然后给你显示车票信息。】

 webdriver的针对某个元素的明确等待 

public class ExplicitWait {
	public static void main(String[] args) throws Exception {  
        
	    System.setProperty("webdriver.gecko.driver", ".\\Tools\\geckodriver.exe");  
	          
	    WebDriver driver = new FirefoxDriver();  
	    driver.manage().window().maximize();  
	    
driver.get("https://www.icloud.com/");
		 //创建一个WebDriverWait类的一个对象wait,设置5秒
		 WebDriverWait wait=new WebDriverWait(driver,15);
		 
		 driver.switchTo().frame("auth-frame");
		 WebElement ele=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("/html/body/div/apple-auth/div/div[1]/logo/div/img")));
		 boolean status=ele.isDisplayed();
		 if(status) {
			 System.out.println("可见");
		 }else {
			 System.out.println("不可见");
		 }
}

Sleep(强制等待)

强制当前正在执行的线程休眠

Thread.sleep(long millis)Thread.sleep(long millis, int nanos)

每一个元素可能需要加载的地方都需要设置sleep等待时间

ImplicitlyWait(隐式等待)

是指对整个页面的加载

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

使用implicitlyWait或者明确等待(explicitly wait),方法参数是等待的最大时长。 
也就是只要一找到元素,就会立刻执行下一行代码,不会强制等待参数里设置的时间。

如果implicitlyWait和explicitly wait都在用在代码里,那么最大等待时间不是两个时间的叠加,而是取最大值(可以观察到,页面显示出来,但是服务器还在运行中)。

隐式等待在driver的整个生命周期内都有效。也就是说,driver在没有被close()之前,定位每个元素时,都会有隐式等待的10s,也就是说,只需要设置一次,所有的元素都可有最多10s的等待加载的时间

隐式等待使得WebDriver在查找一个Element或者Element数组时,每隔一段特定的时间就会轮询一次DOM,如果Element或数组没有马上被发现的话。

FluentWait(流畅等待)

FluentWait的定义

简单来说,FluentWait就是一个普通的类,我们使用这个类能支持一直等待直到特定的条件出现。

1)是一个类而且是包org.openqa.selenium.support.ui的一部分

2)是Wait接口的一种实现

3)每个Fluent wait,我们可以设置等待最大时间,而且可以做设置等待的频率去检查一些特定的条件。

FluentWait 和 Explicit Wait的区别:简单来说就是Explicit Wait里有一些设定好了的前置条件的等待方式,而Fluent wait你可以设置自己的方法去处理各种等待的问题。

public class HandlePopup {
	public static void main(String[] args) throws Exception {
		
		System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
        
		WebDriver driver = new ChromeDriver();
		
		driver.get("www.test.com");
		driver.manage().window().maximize();
		//创建了一个FlentWait类的一个对象wait
		Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
				//最大等待时间是60秒
				   .withTimeout(60, TimeUnit.SECONDS)
			 //每隔两秒去找一次元素ele1是否在页面显示
			       .pollingEvery(2, TimeUnit.SECONDS)
			 //并且忽略NoSuchElement异常
			       .ignoring(NoSuchElementException.class);
			 //ele1定位过程使用了对象wait
		WebElement ele1 = wait.until(new Function<WebDriver, WebElement>() {
			 //一个等待的条件
		     public WebElement apply(WebDriver driver) {
		 
		       return driver.findElement(By.id("xxxxxxx"));
		 
		     }
		 
		   });	 
		
 
	}
 
}

整理来自:感谢

https://blog.csdn.net/chencong_5555/article/details/79376229

https://www.2cto.com/kf/201708/667251.html

https://blog.csdn.net/u011541946/article/details/74538495

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值