Selenium 2 - 如何在隐式等待时检查元素是否不存在?

Mar*_*lis 5 java selenium-webdriver

如果使用以下代码检查缺少的元素:

// ...
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
try {
    driver.findElement(By.cssSelector("td.name"));
} catch (NoSuchElementException e) {

    // here you go, element not found

}
Run Code Online (Sandbox Code Playgroud)

你得到了正确的结果,但由于findElement隐式等待的方法阻塞,运行时间总是30秒.

有没有办法避免这种行为,同时保持隐含的等待?

<EDIT> 测试将由非开发人员通过Selenium IDE生成,因此我需要一个解决方案,使他们的工作尽可能简单(保持等待隐含!). </EDIT>

谢谢,

马尔科

Nic*_*son 2

您也许可以使用 xpath 选择器来完成此操作。找到您知道应该存在的元素之前的元素,然后使用“following-sibling”来获取下一个元素。就像是:

//td.previous/following-sibling::td
Run Code Online (Sandbox Code Playgroud)

然后检查一下它是否没有返回“名称”。当然,只有存在另一个“td”元素时,这才有效。

就我个人而言,我很想放弃隐式等待,只在需要时使用等待。

private WebElement cssWait( final String css )
{
    return new WebDriverWait( driver, 30 ).until( new ExpectedCondition< WebElement >()
    {
        @Override
        public WebElement apply( WebDriver d )
        {
            return d.findElement( By.cssSelector( css ) );
        }
    } );
}
Run Code Online (Sandbox Code Playgroud)