如何在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(如果您想使用正则表达式模式)。