在Selenium Element.displayed()中等待太久之前,请捕获异常



我已经写了一个方法islementPresent,它返回true/false,无论是否显示元素。

这是我的方法

    public static bool IsElementPresent(this IWebElement element)
    {
        try
        {
            return element.Displayed;                                  
        }
        catch (Exception)
        {
            return false;
        }
    }

现在有时当它返回false时,element.displayed是在捕获异常和返回false之前等待20秒(通过调试(。如果找到元素,则可以正常工作。

我还将代码更改为:

public static bool IsElementPresent(this IWebElement element)
{          
    try
    {
        WebDriverWait wait = new WebDriverWait(DriverContext.Driver, TimeSpan.FromSeconds(0.1));
        wait.Until(ExpectedConditions.ElementToBeClickable(element));                
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

现在在wait.lil行中也发生了同样的等待。代码工作正常,但在找不到元素时只是不需要的延迟。找到元素的方式是否有意义。当通过类发现元素时,这种特殊的延迟正在发生。使用XPATH,CSS或ID找到其他大多数元素。让我知道我是否错过了任何信息。使用VS社区15.5.6

根据api docs IWebElement.Displayed属性 gets a value indicating whether or not this element is displayed 。它没有等待。因此,如果任何异常立即提出。

但是,当您诱导 wait.ultil 以及预期条件类别提供一组可以等待使用 web droverwait类的常见条件 webdriver 实例按照预期的条件等待,这是 emem> endivalconditions.elementtobeclickable方法(在您的情况下(。

ExpectedConditions.ElementToBeClickable Method (By) 定义为可见并启用检查元素的期望,以便您可以单击它。

  • 语法是:

    public static Func<IWebDriver, IWebElement> ElementToBeClickable(
        By locator
    )
    
  • 参数:

    locator
    Type: OpenQA.Selenium.By
    The locator used to find the element.
    
  • 返回值:

    Type: Func<IWebDriver, IWebElement>
    The IWebElement once it is located and clickable (visible and enabled).
    

因此,在功能上,与 webdriverwait 预期的。。

最后,正如您提到的在类通过类元素时,这种特殊的延迟正在发生。使用XPATH,CSS或ID 发现了其他大多数元素,这是与定位器策略相关的事实,您在以下列表中选择 locator 时使用的是:

  • css selector
  • link text
  • partial link text
  • tag name
  • xpath

关于定位器的性能方面有很多实验和基准测试。您可以在这里找到一些讨论:

  • 使用硒的定位器性能指标
  • CSS vs。x路径
  • CSS vs。x路径,在显微镜下
  • CSS vs。x路径,在显微镜下(第2部分(
  • CSS-Selector与AMP之间有什么区别X Path?哪个更好(根据性能&amp;用于交叉浏览器测试(?

相关内容

  • 没有找到相关文章

最新更新