无法让selenium webdriver等待指定的时间

时间:2016-11-08 22:04:30

标签: java google-chrome selenium selenium-webdriver integration-testing

我正在使用以下代码,以便selenium驱动程序在进行任何进一步处理之前等待10秒。但页面加载速度太快,似乎增加或减少从10秒到20秒的时间段没有任何区别。我甚至将TimeUnit.SECONDS更改为TimeUnit.MINUTES但没有区别。

我错过了什么?

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

CheckoutTest.java

@Test
public void testCheckoutScenario() throws InterruptedException {
    driver.get(WEBSTORE_BASE_URL); //hit the Home Page
    assertEquals("Home Page", driver.getTitle().trim());

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

    //navigate to category page
    driver.findElement(By.linkText("Gear")).click();
    assertEquals("Gear", driver.getTitle().trim());
    //navigate to subcategory page
    driver.findElement(By.linkText("Watches")).click();
    assertEquals("Watches - Gear", driver.getTitle().trim());

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

    //some more code
}

我正在使用Selenium 3.0,Google Chrome Webdriver和Java 8来运行此测试。

4 个答案:

答案 0 :(得分:1)

有一种方法可以让Selenium等到你的DOM被加载:

WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

您可以在文档here中看到此示例。

在您的情况下,您将等到新页面上的DOM加载。

答案 1 :(得分:1)

您对Selenium隐含等待功能的理解是不正确的 您声明您正在使用隐式等待"以便selenium驱动程序等待10秒后再进行任何进一步处理"。

隐式等待不会延迟处理,而是设置selenium WebDriver等待 AS A MAXIMUM 进行任何实现等待的操作的时间。 "点击()"方法没有实现等待,因此当您执行代码时,它将执行行:
assertEquals("Gear", driver.getTitle().trim());
但失败了,因为它仍然看到页面"主页"因为断言是在页面移动之前执行的。

考虑使用显式等待以下列方式重写代码: -
WebElement myDynamicElement = (new WebDriverWait(driver, 10)) .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));

myDynamicElement是您要导航到的页面上的定位器(等待)。

为了使代码更具可读性,您应该考虑创建一个类来使用try-catch块正确实现定时器。

要了解有关此内容的更多信息,您应该考虑在The Selenium Handbook注册免费的Selenium训练营。等待在第4天进行。

答案 2 :(得分:0)

使用Thread.sleep()代替implicitlyWait()。见样本

driver.get(WEBSTORE_BASE_URL);
assertEquals("Home Page", driver.getTitle().trim());
Thread.sleep(10000); //Thread default time unit is millisecond

答案 3 :(得分:0)

隐式等待给出了等待的最长时间。但是在等待结束之前它会在下一行运行。因此,尝试使用WebDriverWait类正确等待直到指定的条件。

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By
                .className("session")));

如果您不想指定条件使用Thread.sleep();