您好我需要检查一个下拉字段是否有给定的值,但这些值未被选中,因此它不会显示在下拉框中。 我有元素
的Xpath//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not=']
在浏览器中正确识别元素。但是当我使用以下webdriver方法验证它时
driver.findElement(By.xpath("//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not=']")).isDisplayed();
它返回false,因为它没有显示在框中。
你可以告诉我替代方案。
答案 0 :(得分:8)
你想:
private boolean isElementPresent(WebDriver driver, By by){
return driver.findElements(by).count != 0;
}
findElements()
比findElement()
更好,因为如果元素不存在,它将不会等待。如果您在启用隐式等待的情况下运行,findElement()
将超时寻找元素(这是您正在捕获的异常),并且需要一段时间。
答案 1 :(得分:4)
我发现WebDriver没有名为isElementPresent()
的函数。这是Selenium-1.0中使用的重要功能之一。
要在WebDriver中实现此功能,您只需编写如下所述的方法。然后,您可以将此函数用于任何类型的By
(By.id,BY.name等)
private boolean isElementPresent(WebDriver driver, By by){
try{
driver.findElement(by);
return true;
}catch(NoSuchElementException e){
return false;
}
}
这是一个如何调用此函数的示例
if (isElementPresent(by.id("btnSubmit")) {
// preform some actions
}
如果在页面上找到元素,则上述函数将返回true,否则将返回false。
答案 2 :(得分:0)
internal static bool IsElementPresent(IWebDriver driver, By by, int timeoutSeconds=10)
{
for (int second = 0; second< timeoutSeconds ; second++)
{
try
{
driver.FindElement(by);
}
catch (NoSuchElementException e)
{
Thread.Sleep(1000);
continue;
}
return true;
}
return false;
}
答案 3 :(得分:0)
使用 isDisplayed()来验证网页上的元素是否可用。