无法让 selenium webdriver 等待指定的时间
Not able to make selenium webdriver wait for specified period
我正在使用以下代码,以便 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 运行 此测试。
有一种方法可以让 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 加载完毕。
您对 Selenium 的隐式等待功能的理解不正确。
您声明您正在使用隐式等待 "so that selenium driver waits 10 seconds before doing any further processing".
隐式等待不会延迟处理,而是设置 selenium WebDriver 等待任何实现等待的操作的时间 AS A MAXIMUM。
"click()" 方法没有实现等待,所以当你执行你的代码时,它会执行行:
assertEquals("Gear", driver.getTitle().trim());
但失败了,因为它仍然看到页面 "Home Page",因为断言是在页面移动之前执行的。
考虑按以下方式使用显式等待重写代码:-
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
其中 myDynamicElement 是您希望导航到的页面上的定位器(等待)。
为了使您的代码更具可读性,您应该考虑创建一个 class 以使用 try-catch 块正确实现计时器。
要了解更多相关信息,您应该考虑在 The Selenium Handbook 注册免费的 Selenium 训练营。第 4 天包含等待时间。
使用 Thread.sleep()
而不是 implicitlyWait()
。查看示例
driver.get(WEBSTORE_BASE_URL);
assertEquals("Home Page", driver.getTitle().trim());
Thread.sleep(10000); //Thread default time unit is millisecond
隐式等待给出最大等待时间。但它会在等待结束前 运行 下一行。所以尝试使用 WebDriverWait
class 来正确等待直到指定条件。
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By
.className("session")));
如果您不想指定条件,请使用 Thread.sleep();
我正在使用以下代码,以便 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 运行 此测试。
有一种方法可以让 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 加载完毕。
您对 Selenium 的隐式等待功能的理解不正确。
您声明您正在使用隐式等待 "so that selenium driver waits 10 seconds before doing any further processing".
隐式等待不会延迟处理,而是设置 selenium WebDriver 等待任何实现等待的操作的时间 AS A MAXIMUM。
"click()" 方法没有实现等待,所以当你执行你的代码时,它会执行行:
assertEquals("Gear", driver.getTitle().trim());
但失败了,因为它仍然看到页面 "Home Page",因为断言是在页面移动之前执行的。
考虑按以下方式使用显式等待重写代码:-
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
其中 myDynamicElement 是您希望导航到的页面上的定位器(等待)。
为了使您的代码更具可读性,您应该考虑创建一个 class 以使用 try-catch 块正确实现计时器。
要了解更多相关信息,您应该考虑在 The Selenium Handbook 注册免费的 Selenium 训练营。第 4 天包含等待时间。
使用 Thread.sleep()
而不是 implicitlyWait()
。查看示例
driver.get(WEBSTORE_BASE_URL);
assertEquals("Home Page", driver.getTitle().trim());
Thread.sleep(10000); //Thread default time unit is millisecond
隐式等待给出最大等待时间。但它会在等待结束前 运行 下一行。所以尝试使用 WebDriverWait
class 来正确等待直到指定条件。
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By
.className("session")));
如果您不想指定条件,请使用 Thread.sleep();