簡體   English   中英

Selenium WebDriver:如何計算列表中 DIV 元素的數量

[英]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")));

怎么等到<div>使用 selenium webdriver 重新加載部分?</div><div id="text_translate"><p> div 部分中有多個下拉菜單。 如果我 select 是其中一個下拉菜單中的一個選項,則所有其他下拉菜單都會自動加載而無需重新加載頁面。 這是因為只有特定部分會重新加載。 有時這加載速度很快,有時很慢。 我們如何設置 webdriver 等到這個 div 部分完全重新加載。</p><pre> &lt;div id="Fruits"&gt;... ... &lt;/div&gt;</pre><p> 我正在使用 C# 謝謝</p></div>

[英]How to wait until <div> section reload using selenium webdriver?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM