Selenium中的几种时间等待

在编写您的第一个Selenium程序时,您可能会遇到waitCommands。但是,你知道Selenium到底是什么吗?在Selenium中等待是执行测试用例所需的一段重要代码。在本文中,我将简要介绍在实践中广泛使用的不同类型的等待命令。

** 什么是Selenium Waits?

  • 为什么我们需要Selenium中的等待?
  • 轮候类型
  • 隐式等待
  • 显式等待
  • 隐式等待与显式等待

Selenium等待命令

什么是Selenium Waits?

等待帮助用户解决问题,同时重定向到不同的网页。这是通过刷新整个网页并重新加载新的网页来实现的。有时,也可能有Ajax调用。因此,可以在重新加载网页并反映网页元素时出现时间滞后。 经常发现用户来回浏览各种网页。 因此,由WebDriver提供的Navigate()命令/方法通过参照Web浏览器的历史在网页之间导航来帮助用户模拟实时场景。

为什么需要在Selenium中等待?

大多数Web应用程序都是使用AJAX和Javascript开发的。当浏览器加载页面时,我们要与之交互的元素可能会以不同的时间间隔加载。这样不仅很难识别元素,而且如果没有找到元素,它将弹出“ElementNotVisibleException”异常。通过使用WAITS,我们可以解决这个问题。 现在让我们进一步了解不同类型的等待。

等待类型

Selenium支持两种类型的等待,隐式等待与显式等待

注意:最广泛使用的等待是隐式和显式等待,而Fluent等待对于实时项目并不可取。

隐式等待

隐式等待将告诉Web驱动程序在抛出“No That Element Exception”之前等待一定的时间。隐含等待的默认设置为零。一旦您设置了时间,Web驱动程序将在抛出异常之前等待特定的时间。

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

让我们举一个隐式等待的例子,了解它是如何工作的。

package Edureka;
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;
public class ImplicitWait{
public static void main(String[] args) throws InterruptedException{
System.setProperty("webdriver.chrome.driver", "C:Selenium-java-edurekachromedriver_win32chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS); // pageload timeout
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);    // Implicit Wait for 20 seconds
driver.get("https://login.yahoo.com/");
driver.findElement(By.xpath("//input[@id='login-username']")).sendKeys("edureka@yahoo.com"); //Finding element and sending values
Thread.sleep(1000);
driver.findElement(By.xpath("//input[@id='login-signin']")).click(); //Clicking on the next button if element is located
}
}

在上面的代码中,我给出的隐式等待为20秒,这意味着加载特定元素或到达输出的最长等待时间为20秒。 注意:IMPLICITLY WAIT是全局应用的,这意味着它对整个驱动程序实例中的所有Web元素始终可用。这意味着如果驱动程序正在与100个元素交互,则隐式等待适用于所有100个元素。这都是关于隐式等待的。现在更深入地研究等待,了解什么是显性等待。

显式等待

它是动态等待的一个概念,它动态地等待特定的条件。可以通过WebDriverWait 类实现。要理解Selenium Webdriver中的显式等待,您应该知道我们为什么在程序中使用wait语句的要求。我将给您几个示例,在这些示例中,您将全面了解为什么在Selenium中等待很重要。

Selenium web驱动中显式等待的条件

条件1--假设我有一个网页,其中有一些登录表单,登录后,需要花费大量时间来加载帐户页面或主页。这个页面是动态的,这意味着有时需要10秒来加载主页,有时需要15秒,以此类推。在这种情况下,显式等待有助于用户等待,直到特定页面不存在。 条件2-您正在处理旅行申请,并且您已经提交了一份Web表单并单击了提交按钮。现在您必须等待,直到没有显示特定的数据。在这种情况下,您可以再次使用显式等待,您可以设置WAITS直到不显示特定或一组元素。

_Syntax:_ WebDriverWait wait=new WebDriverWait(WebDriveReference,TimeOut);

在上面的语法中,我创建了一个WebDriver等待的对象,并将驱动程序引用和超时作为参数传递。这就是您需要编写显式等待的方式。现在让我们举个例子,了解显式等待是如何工作的。让我们看一下下面的代码。

package Edureka;
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;
public class Locators {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "C:Selenium-java-edurekachromedriver_win32chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("https://www.facebook.com/");
WebElement firstname= driver.findElement(By.name("firstname"));
WebElement lastname= driver.findElement(By.name("lastname"));
sendKeys(driver, firstname, 10, "Edureka");
sendKeys(driver, lastname, 20, "Edureka");
WebElement forgotAccount= driver.findElement(By.linkText("Forgotten account?"));
clickOn(driver,forgotAccount, 10);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
public static void sendKeys(WebDriver driver1, WebElement element, int timeout, String value){
new WebDriverWait(driver1, timeout).until(ExpectedConditions.visibilityOf(element));
element.sendKeys(value);
}
public static void clickOn(WebDriver driver1, WebElement element, int timeout){
new WebDriverWait(driver1, timeout).until(ExpectedConditions.elementToBeClickable(element));
element.click();
}
}
​

在上面的示例中,我使用了Facebook注册凭据,并使用名称定位器对其进行了定位。此外,我还创建了一个实用程序或一个泛型函数,所有元素都可以使用它来提供显式等待。

在上面的示例中,我编写了自己的sendKeys()方法。此方法将在特定的文本字 但在内部它还将提供显式等待。在sendKeys()方法中,我为元素的可见性指定了ExspectedConditions。也就是说,我要求司机等待20秒,直到元素的预期条件可见性。此外,如果满足条件,则可以将sendKeys()应用于该方法。现在,我想输入我的名字和姓氏。我要做的是,我将使用this_sendKeys()方法并将驱动程序、名字、超时(即10秒)和值作为edureka传递。姓氏也是如此。 当您执行该程序时,Chrome驱动程序将启动Google Chrome,在http://facebook.com中导航并输入代码中提到的值。不一定要显式设置某个特定值的等待超时,您可以根据需要更改它。这是使用显式等待的主要优点,但是对于隐式等待,一旦您定义了10秒,它将适用于网页上的所有元素,并且不能修改。ClickOn()Method也是如此。但是,这种方法只对网页上的链接有用。这就是您可以使用显式等待的方式。 注:隐式、显式和流畅等待是动态等待,什么是动态等待?考虑这样一种情况,您指定的超时值为20秒。如果元素在5秒内加载,则睡觉15秒将被忽略。它不会等到超时值完成,即20秒。这就是为什么所有等待都被视为动态等待的原因。让我们更进一步,区分隐式等待和显式等待。

学习安排上

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。【保证100%免费】

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小怡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值