如何在Selenium 2的方法中写等待?

时间:2017-01-25 14:43:37

标签: java selenium selenium-webdriver wait selenium-chromedriver

这种加载导航链接页面的方法,需要时间来测试提交。当我检查页面加载了正确的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

1 个答案:

答案 0 :(得分:0)

如果您知道预期的网址,则可以使用动态等待而不是&#34; dumb&#34;睡觉。这将等待URL最多1分钟,并在找到后立即继续(可能远远少于1分钟,每秒轮询两次):

WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.urlContains(submenus[i].toLowerCase()));

您还可以使用urlToBe(如果您知道确切的网址)或urlMatches(如果您想使用正则表达式模式)。