这种加载导航链接页面的方法,需要时间来测试提交。当我检查页面加载了正确的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:检查URL是否包含:iMacs
答案 0 :(得分:0)
如果您知道预期的网址,则可以使用动态等待而不是&#34; dumb&#34;睡觉。这将等待URL最多1分钟,并在找到后立即继续(可能远远少于1分钟,每秒轮询两次):
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.urlContains(submenus[i].toLowerCase()));
您还可以使用urlToBe
(如果您知道确切的网址)或urlMatches
(如果您想使用正则表达式模式)。