wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.ClassName(className))不返回任何元素

时间:2016-09-19 14:05:44

标签: selenium selenium-webdriver webdriver selenium-chromedriver

我需要使用 WebDriverWait 找到 IReadOnlyCollection< IWebElement> ,以确保元素已在页面上呈现。

这是我的代码

 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
 return wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.ClassName("TextInput")));

此代码在超时时失败。 意味着在页面上找不到具有给定类名的任何元素。 我添加了这行代码 BEFORE 我的原始代码只是为了确保元素存在

 var allInputs1 = container.FindElements(By.ClassName("textInput"));

该行按预期返回元素。

所以我的结论就是这样 wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.ClassName("TextInput"))) 没有按预期工作,因为找不到肯定存在于页面上的元素。

使用 WebDriverWait 查找元素数组的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

你的结论是错误的。使用FindElements,您只需确保元素存在。

VisibilityOfAllElementsLocatedBy州的API文档:

  

期望检查网页上的所有元素   匹配定位器是可见的。可见性意味着元素   不仅显示,而且还有高度和宽度   大于0。

显然现在不是可见

我认为你应该尝试ExpectedConditions.PresenceOfAllElementsLocatedBy