Selenium中的隐式等待和显式等待

这篇具有很好参考价值的文章主要介绍了Selenium中的隐式等待和显式等待。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Selenium中,“等待”在执行测试中起着重要作用。在本文中,您将学习Selenium中“隐式”和“显式”等待的各个方面。 在本文中,您将学习到

1. 为什么我们需要在selenium中等待?

2. 隐瞒等待

3. 明确等待

4. 流利的等待

为什么我们需要在Selenium中等待?

大多数Web应用程序都是使用Ajax和Javascript开发的。当浏览器加载页面时,我们想要与之交互的元素可能以不同的时间间隔加载。

它不仅难以识别元素,而且如果元素未定位,它将抛出“ ElementNotVisibleException ”异常。使用Waits,我们可以解决此问题。

让我们考虑一个场景,我们必须在测试中使用隐式和显式等待。假设隐式等待时间设置为20秒,显式等待时间设置为10秒。

假设我们试图找到一个具有一些“ExpectedConditions ”(显式等待)的元素,如果该元素不在显式等待(10秒)定义的时间范围内,它将使用由隐式等待定义的时间帧(在抛出“ ElementNotVisibleException ” 之前20秒)。

Selenium Web驱动程序等待

隐含的等待 明确等待 隐含的等待 Selenium Web Driver借用了Watir隐式等待的想法。

隐式等待将告诉Web驱动程序在它抛出“No Such Element Exception”之前等待一定的时间。默认设置为0.一旦我们设置了时间,Web驱动程序将在抛出异常之前等待该时间。

在下面的示例中,我们声明了一个隐含的等待,时间范围为10秒。这意味着如果元素在该时间范围内不位于网页上,则会引发异常。

声明隐式等待:

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

package guru.test99;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class AppTest {
	
	protected WebDriver driver;
	@Test
	public void guru99tutorials() throws InterruptedException 
	{
	System.setProperty ("webdriver.chrome.driver",".\\chromedriver.exe" );
	driver = new ChromeDriver(); 
	driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS) ;
	String eTitle = "Demo Guru99 Page";
	String aTitle = "" ;
	// 启动Chrome并将其重定向到基本网址
	driver.get("http://demo.guru99.com/test/guru99home/" );
	//最大化浏览器窗口
	driver.manage().window().maximize() ;
	//获取标题的实际值
	aTitle = driver.getTitle();
	//将实际标题与预期标题进行比较
	if (aTitle.equals(eTitle))
	{
	System.out.println( "Test Passed") ;
	}
	else {
	System.out.println( "Test Failed" );
	}
	//关闭浏览器
	driver.close();
}
}

代码说明

在上面的例子中,

考虑以下代码:

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

隐式等待将接受2个参数,第一个参数将接受时间作为整数值,第二个参数将接受时间测量,包括SECONDS,MINUTES,MILISECOND,MICROSECONDS,NANOSECONDS,DAYS,HOURS等。

明确等待 显式等待用于告诉Web驱动程序在抛出“ ElementNotVisibleException ”异常之前等待某些条件(预期条件)或超过最大时间。

显式等待是一种智能的等待,但它只能应用于指定的元素。显式等待提供比隐式等待更好的选项,因为它将等待动态加载的Ajax元素。

一旦我们声明显式等待,我们必须使用“ ExpectedCondtions ”,或者我们可以配置我们想要使用Fluent Wait检查条件的频率。这些天在实现我们使用Thread.Sleep()时通常不建议使用

在下面的示例中,我们创建引用等待“ WebDriverWait ”类并使用“ WebDriver ”引用进行实例化,并且我们给出的最大时间帧为20秒。

句法:

WebDriverWait wait = new WebDriverWait(WebDriverRefrence,TimeOut);
package guru.test99;
 
import java.util.concurrent.TimeUnit;
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.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;
 
public class AppTest2 {
	protected WebDriver driver;
	@Test
	public void guru99tutorials() throws InterruptedException 
	{
	System.setProperty ("webdriver.chrome.driver",".\\chromedriver.exe" );
	driver = new ChromeDriver(); 
	WebDriverWait wait=new WebDriverWait(driver, 20);
	String eTitle = "Demo Guru99 Page";
	String aTitle = "" ;
	// 启动Chrome并将其重定向到Base URL
	driver.get("http://demo.guru99.com/test/guru99home/" );
	//最大化浏览器窗口
	driver.manage().window().maximize() ;
	//获取标题的实际值
	aTitle = driver.getTitle();
	//将实际标题与预期标题进行比较
	if (aTitle.contentEquals(eTitle))
	{
	System.out.println( "Test Passed") ;
	}
	else {
	System.out.println( "Test Failed" );
	}
	WebElement guru99seleniumlink;
	guru99seleniumlink= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( "/html/body/div[1]/section/div[2]/div/div[1]/div/div[1]/div/div/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/a/i")));
	guru99seleniumlink.click();
	}
	
}

代码说明

考虑以下代码:

WebElement guru99seleniumlink;
guru99seleniumlink= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(                   "/html/body/div[1]/section/div[2]/div/div[1]/div/div[1]/div/div/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/a/i")));
 	guru99seleniumlink.click();
在上面的示例中,等待“ WebDriverWait ”类或“ ExpectedConditions ”中定义的时间量,以先发生者为准。

上面的Java代码声明我们正在等待网页上“ WebDriverWait ”类中定义的20秒时间帧的元素,直到满足“ ExpectedConditions ”并且条件为“ visibilityofElementLocated ”。

以下是可以在显式等待中使用的预期条件

·  alertIsPresent()

·  elementSelectionStateToBe()

·  elementToBeClickable()

·  elementToBeSelected()

·  frameToBeAvaliableAndSwitchToIt()

·  invisibilityOfTheElementLocated()

·  invisibilityOfElementWithText()

·  presenceOfAllElementsLocatedBy()

·  presenceOfElementLocated()

·  textToBePresentInElement()

·  textToBePresentInElementLocated()

·  textToBePresentInElementValue()

·  titleIs()

·  titleContains()

·  visibilityOf()

·  visibilityOfAllElements()

·  visibilityOfAllElementsLocatedBy()

·  visibilityOfElementLocated()

流利的等待

流畅的等待用于告诉Web驱动程序等待条件,以及在抛出“ElementNotVisibleException”异常之前我们想要检查条件的频率。

频率:设置具有时间范围的重复循环,以定期验证/检查条件

让我们考虑一个场景,其中元素以不同的时间间隔加载。如果我们声明显式等待20秒,该元素可能会在10秒,20秒甚至更长时间内加载。在抛出异常之前它会等到指定的时间。在这种情况下,流畅的等待是理想的等待使用,因为这将尝试以不同的频率找到元素,直到它找到它或最终的计时器用完为止。 句法:

Wait wait = new FluentWait(WebDriver reference)
.withTimeout(timeout, SECONDS)
.pollingEvery(timeout, SECONDS)
.ignoring(Exception.class);
package guru.test99;
 
import org.testng.annotations.Test;
import java.util.NoSuchElementException;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
 
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.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;
 
public class AppTest3 {
	protected WebDriver driver;
	@Test
	public void guru99tutorials() throws InterruptedException 
	{
	System.setProperty ("webdriver.chrome.driver",".\\chromedriver.exe" );
	String eTitle = "Demo Guru99 Page";
	String aTitle = "" ;
	driver = new ChromeDriver();
	// 启动Chrome并将其重定向到Base URL 
	driver.get("http://demo.guru99.com/test/guru99home/" );
	//最大化浏览器窗口
	driver.manage().window().maximize() ;
	//获取标题的实际值
	aTitle = driver.getTitle();
	//将实际标题与预期标题进行比较
	if (aTitle.contentEquals(eTitle))
	{
	System.out.println( "Test Passed") ;
	}
	else {
	System.out.println( "Test Failed" );
		}
	
	Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)							
			.withTimeout(30, TimeUnit.SECONDS) 			
			.pollingEvery(5, TimeUnit.SECONDS) 			
			.ignoring(NoSuchElementException.class);
	WebElement clickseleniumlink = wait.until(new Function<Webdriver, WebElement>(){
	
		public WebElement apply(WebDriver driver ) {
			return driver.findElement(By.xpath("/html/body/div[1]/section/div[2]/div/div[1]/div/div[1]/div/div/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/a/i"));
		}
	});
	//点击selenium链接
	clickseleniumlink.click();
	//关闭浏览器
	driver.close() ;
	}
}

代码说明

考虑以下代码:

public WebElement apply(WebDriver driver ) {
	return 		driver.findElement(By.xpath("/html/body/div[1]/section/div[2]/div/div[1]/div/div[1]/div/div/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/a/i"));
}	

我们创建了一个新功能来识别页面上的Web元素。(例如:这里的Web元素只不过是网页上的selenium链接)。

频率设置为5秒,最大时间设置为30秒。因此,这意味着它将每隔5秒检查网页上的元素,最长时间为30秒。如果元素位于此时间范围内,它将执行操作,否则将抛出“ ElementNotVisibleException ”

隐式等待与显式等待的区别

selenium显示等待和隐式等待,selenium,测试工具,python,自动化,测试用例

 

结论:

隐式,显式和流利等待是selenium中使用的不同等待。这些等待的使用完全基于以不同时间间隔加载的元素。在测试我们的应用程序或构建我们的框架时,始终不建议使用Thread.Sleep()。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

selenium显示等待和隐式等待,selenium,测试工具,python,自动化,测试用例

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   文章来源地址https://www.toymoban.com/news/detail-734491.html

到了这里,关于Selenium中的隐式等待和显式等待的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium 三种等待方式详解 (强制等待、隐式等待、显示等待)

    ①在进行WEB自动化工作时,一般要等待某一页面元素加载完成后,才能对该元素执行操作,否则自动化脚本会抛出找不到元素的错误,这样就要求我们在UI自动化测试的有些场景上加上等待时间。 ②等待方式的设置是保证自动化脚本稳定有效运行的一个非常重要的手段。 ①强

    2024年02月03日
    浏览(41)
  • 五、Selenium 三种等待方式:强制等待、隐式等待、显示等待

    名词解释:强制线程休眠一定时间,适合脚本调试时使用。 常用方法: Thread.sleep(long millis); 优点:适合脚本调试时使用; 缺点:不能准确把握需要等待的时间,如果用例中大量使用,会浪费不必要的等待时间,影响用例的执行效率; 操作未完成,等待结束,导致系统报错

    2023年04月08日
    浏览(37)
  • web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天

    获取到的断言信息就是实际结果 预期结果使我们确定的,直接写在代码中的 而实际结果是无法确定的,所以需要用一些方法去获取 代码示例 场景:当我们加载页面的时候,一些元素是需要时间的 就有可能发生,代码执行到了,而元素没有被加载出来 此时就会出现找不到元

    2024年01月17日
    浏览(45)
  • Java Selenium中的等待和超时

    在执行 selenium 自动化测试时,我们使用等待来使我们的测试可靠且健壮。最常见的是,在运行自动化测试时,如果在加载 Webdriver 想要交互的特定元素时出现延迟,我们会看到“ElementNotVisibleException”。 等待和超时可帮助用户在执行某些操作或在应用程序中的不同页面之间导

    2024年02月03日
    浏览(32)
  • selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

    目录 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until()或者until_not()方法结合使用 WebDriverWait与expected_conditions结合使用 显示等待,自定义等待条件 设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点:不智能,使用太多的

    2024年02月16日
    浏览(37)
  • Makefile基础教程(make的隐式规则)

    本篇文章将给大家介绍make的隐式规则。 Make 的隐式规则是指 Make 在没有找到显式规则的情况下,会自动使用的一组规则。这些规则是预定义好的,可以被 Make 自动识别和调用,不需要用户指定具体的规则。 隐式规则的使用可以大大简化 Makefile 的编写,特别是当需要编译大量

    2024年02月06日
    浏览(42)
  • 默认成员函数:详解类的隐式操作

    类的默认成员函数就是定义一个类后,类会 自动生成的成员函数 ,若我们显示定义则类不会自动生成。 在数据结构学习阶段我们手撕过栈、链表、队列等数据结构,当时我们是用C语言来实现的,每一种数据结构都有自己的初始化和销毁函数。这两个函数对数据结构的使用非

    2024年02月02日
    浏览(34)
  • Scala隐式参数提示 找不到参数的隐式 报错ambiguous implicit values:

    这个问题纯属被一个博客给坑了,Scala的隐式查找是按照类型查找的,例如这里的x是Int,y是Int,那么编译器就不知道你要传入的是哪个,哪怕你把参数都x,y这些名称都对应也不行。 解决方法很简单,同类型的隐式参数唯一即可 不知道是另有原因还是什么,有些博主写博客真就

    2024年03月19日
    浏览(42)
  • PocketMiner:基于深度学习发现蛋白的隐式口袋

    标题:Predicting locations of cryptic pockets from single protein structures using the PocketMiner graph neural network 期刊: Nature communictions 团队:华盛顿大学生物化学与分子生物物理系 DOI:https://doi.org/10.1038/s41467-023-36699-3 靶点的成药口袋是药物研发的起点,而除了在自然状态下显而易见的”显式

    2024年02月10日
    浏览(39)
  • MySQL 的隐式转换导致诡异现象的案例一则

    正是因为 MySQL 对字符串进行隐式转换时会截断再转,而不是像 Oracle、SQL Server 这些数据库针对这种问题直接报错,所以才出现了这个诡异的问题。 作者:刘晨 网名 bisal ,具有十年以上的应用运维工作经验,目前主要从事数据库应用研发能力提升和技术管理相关的工作,Or

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包