我正在使用以下代码,以便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来运行此测试。
答案 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();