selenium webdriver(c#)ExpectedConditions - 如果元素不存在,如何获取句柄?

时间:2014-10-01 17:02:42

标签: c# selenium selenium-webdriver webdriver

使用c#和selenium webdriver,我能够通过使用以下代码来处理元素是否存在:

new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)).Until(ExpectedConditions.ElementExists((By.Id(login))));

但我如何检查相反的情况呢?即一个元素不存在?

2 个答案:

答案 0 :(得分:2)

据我所知,Selenium没有Exists属性,这将非常有用。相反,如果某个元素不存在,Selenium会抛出异常。这已经进行了测试,以确保网页上不存在有趣处理的元素。

我采用的方法是查看元素是否为Displayed,并将其包装在try-catch中:

bool displayed = false;
try
{
    wait = new WebDriverWait(driver, TimeSpan.FromSeconds(2));
    wait.Until(driver => driver.FindElement(ByLocator));
    displayed = driver.FindElement(ByLocator).Displayed;
}
catch
{
}

答案 1 :(得分:0)

使用"显示"是一个坏主意,因为"显示"意味着"可见"。如果元素将具有" display:none;" css样式,它将被标记为不存在。 但是这个元素仍然存在!只是不可见!

最好使用这样的功能:

public bool IsExist()
{
    if (element == null || element.Size.Width < 1)
    {
            return false;
    }

    return true;
}

当你看到它检查null对象和元素宽度时。 我相信更多可能的元素不会显示(不可见),而是宽度<1 =)