[英]Selenium WebDriver: how to count number of DIV elements in a list
我正在嘗試使用 Selenium 計算網頁上數據網格中的行數。 每一行都由一個 div 表示,使用以下結構(針對本文進行了簡化):-
<div id="resultsGrid">
<div>
<div>
<div/>
<div>
<div class="canvas">
<div data-bind="foreach: renderedRows">
<div>list item</div>
<div>list item</div>
<div>list item</div>
<div>list item</div>
</div>
</div>
</div>
</div>
</div>
</div>
通過閱讀其他類似的帖子,我嘗試使用以下代碼和 XPath 返回<div data-bind="foreach: renderedRows">
中的 div 數
var rowCount = webDriver.FindElements(By.XPath("//*[@id='usersResultsGrid']/div/div/div[2]/div/div")).Count;
每當我嘗試這個時,我只會返回 1,而不是預期的 4(在本例中)。 誰能指出我做錯了什么的正確方向?
謝謝。
解決。 答案是在 By.XPath("//*[@id='usersResultsGrid']/div/div/div[2]/div/div/div") 中向 xpath 添加一個額外的 div。 我最初的 xpath 指向 div 'data-bind' 元素,當然它的計數只有 1,我需要它下面的 div 列表。
在任何xpath
下方使用,它將識別所有四個元素。
//div[@id='resultsGrid']//div[@class='canvas']/div[@data-bind]/div
或者
//div[@id='resultsGrid']//div[@data-bind]/div
實際上,您的代碼將是
var rowCount = webDriver.FindElements(By.XPath("//div[@id='resultsGrid']//div[@class='canvas']/div[@data-bind]/div")).Count;
要使用Selenium計算數據網格中的行數,您可以使用以下任一定位器策略:
選擇器:
var rowCount = webDriver.FindElements(By.XPath("div#resultsGrid div.canvas div[data-bind$='renderedRows'] > div")).Count;
XPath :
var rowCount = webDriver.FindElements(By.XPath("//div[@id='resultsGrid']//div[@class='canvas']/div[contains(@data-bind, 'renderedRows')]/div")).Count;
理想情況下,您必須為所需的VisibilityOfAllElementsLocatedBy()
誘導WebDriverWait並且您可以使用以下任一定位器策略:
選擇器:
var rowCount = new WebDriverWait(webDriver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.CssSelector("div#resultsGrid div.canvas div[data-bind$='renderedRows'] > div")));
XPath :
var rowCount = new WebDriverWait(webDriver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.XPath("//div[@id='resultsGrid']//div[@class='canvas']/div[contains(@data-bind, 'renderedRows')]/div")));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.