如何在Selenium 2 的方法中写wait?
How to write wait in the method in Selenium 2?
这种加载导航页面的方法link,需要时间测试提交。当我检查页面是否加载了正确的 url 时,我的测试失败了。我试着写:
waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]")), 500);
Thread.sleep(2000);
这是我的代码:
public void showNavigationLinks(){
Actions action = new Actions(driver);
String[] submenus = {"Accessories", "iMacs", "iPads" , "iPhones" , "iPods" , "MacBook"};
for(int i=0;i<submenus.length;i++)
{
waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'Product Category')]")), 500);
WebElement we = driver.findElement(By.xpath("//a[contains(.,'Product Category')]"));
action.moveToElement(we).moveToElement(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]"))).click().build().perform();
//Checking correct URL
waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]")), 500);
Assert.assertTrue("checking if URL contains: " + submenus[i],
driver.getCurrentUrl().toLowerCase().contains(submenus[i].toLowerCase()));
}
}
这是我的错误:
java.lang.AssertionError: checking if URL contains: iMacs
如果您知道预期的 URL,您可以使用动态等待而不是 "dumb" 睡眠。这将等待 URL 最多 1 分钟,并在找到它后立即继续(可能远少于 1 分钟,每秒轮询两次):
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.urlContains(submenus[i].toLowerCase()));
您也可以使用 urlToBe
(如果您知道确切的 URL)或 urlMatches
(如果您想使用正则表达式模式)。
这种加载导航页面的方法link,需要时间测试提交。当我检查页面是否加载了正确的 url 时,我的测试失败了。我试着写:
waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]")), 500);
Thread.sleep(2000);
这是我的代码:
public void showNavigationLinks(){
Actions action = new Actions(driver);
String[] submenus = {"Accessories", "iMacs", "iPads" , "iPhones" , "iPods" , "MacBook"};
for(int i=0;i<submenus.length;i++)
{
waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'Product Category')]")), 500);
WebElement we = driver.findElement(By.xpath("//a[contains(.,'Product Category')]"));
action.moveToElement(we).moveToElement(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]"))).click().build().perform();
//Checking correct URL
waitForElementToBeDisplayed(driver.findElement(By.xpath("//a[contains(.,'"+submenus[i]+"')]")), 500);
Assert.assertTrue("checking if URL contains: " + submenus[i],
driver.getCurrentUrl().toLowerCase().contains(submenus[i].toLowerCase()));
}
}
这是我的错误:
java.lang.AssertionError: checking if URL contains: iMacs
如果您知道预期的 URL,您可以使用动态等待而不是 "dumb" 睡眠。这将等待 URL 最多 1 分钟,并在找到它后立即继续(可能远少于 1 分钟,每秒轮询两次):
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.urlContains(submenus[i].toLowerCase()));
您也可以使用 urlToBe
(如果您知道确切的 URL)或 urlMatches
(如果您想使用正则表达式模式)。