2

我需要找到IReadOnlyCollection <IWebElement>使用WebDriverWait確保元素已經呈現的頁面上。wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.ClassName(類名))不返回任何元素

這是我的代碼

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查找元素數組的最佳方法?

+0

超時意味着一些匹配類的元素仍然隱藏。嘗試使用更多選擇性選擇器。 –

回答

4

你的結論是錯誤的。用FindElements你只需確保元素存在。

的API文檔VisibilityOfAllElementsLocatedBy狀態:

用於檢查匹配定位是目前網頁 上的所有元素都可見的期望。能見度意味着 不僅顯示而且元件具有的高度和寬度,該寬度大於0

更大 很顯然是不可見

我想你應該嘗試ExpectedConditions.PresenceOfAllElementsLocatedBy

+0

謝謝你的回答,但是我看到頁面上的元素,並且我已經嘗試了PresenceOfAllElementsLocatedBy。 FindElements將返回2個結果,PresenceOfAllElementsLocatedBy將返回6個結果 - 其中4個結果確實不可見 - 因此VisibilityOfAllElementsLocatedBy中的錯誤。我的範圍在哪裏變化? –

+1

@Polina F.不,實際上'findElements'不會等待所提供的定位器的元素,因此它只發現只有兩個,而PresenceOfAllElementsLocatedBy將等待提供的定位器匹配元素,這就是爲什麼你會看到差異,而VisibilityOfAllElementsLocatedBy只是爲了所有6個元素的存在和可見性,這就是爲什麼你會得到異常,所以基本上所有的方法都工作得很完美,你只需要改變你的想法。謝謝..:) –