Selenium C#Webdriver如何检测元素是否可见

use*_*482 11 selenium visibility webdriver visible

在最新版本的Selenium DotNet Webdriver(2.22.0)中有没有办法在点击/与之交互之前检查元素是否可见?

我发现的唯一方法是尝试处理当您尝试发送密钥或单击它时发生的ElementNotVisible异常.不幸的是,这只发生在尝试与元素交互之后.我正在使用递归函数来查找具有特定值的元素,并且其中一些元素仅在某些情况下可见(但无论如何它们的html仍然存在,因此可以找到它们).

我的理解是不推荐使用RenderedWebElement类以及其他变体.所以没有铸造.

谢谢.

Arr*_*ran 29

对于Java,RemoteWebElement上有isDisplayed() - 以及isEnabled()

在C#中,有一个Displayed&Enabled属性.

对于元素在页面上并且对用户可见,两者都必须为true.

如果"html仍然存在,那么可以找到它们",只需检查两个显示(Java)/显示(C#)和isEnabled(Java)/ Enabled(C#).

例如,在C#中:

public void Test()
{
    IWebDriver driver = new FirefoxDriver();
    IWebElement element = null;
    if (TryFindElement(By.CssSelector("div.logintextbox"), out element)
    {
        bool visible = IsElementVisible(element);
        if  (visible)
        {
            // do something
        }
    }
}

public bool TryFindElement(By by, out IWebElement element)
{
    try
    {
        element = driver.FindElement(by);
    }
    catch (NoSuchElementException ex)
    {
        return false;
    }
    return true;
}

public bool IsElementVisible(IWebElement element)
{
    return element.Displayed && element.Enabled;
}
Run Code Online (Sandbox Code Playgroud)

  • 我必须不同意,因为 `element.Enabled` 只会为显式禁用的输入元素返回 **false**,因此可见性可以简单地由 `element.Displayed` 属性确定。 (2认同)