我已经写了一个方法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;用于交叉浏览器测试(?