【问题标题】:How to count nested div using selenium c#?如何使用 selenium c# 计算嵌套的 div?
【发布时间】:2018-08-08 21:48:22
【问题描述】:
<div class="bodyCells">
      <div style="position:absolute;left:0;">
         <div style="overflow:hidden;">
            <div title="AAA" class="pivotTableCellWrap">AAA</div>
            <div title="BBB" class="pivotTableCellWrap">BBB</div>
         </div>
         <div>
            <div title="AAA-123" class="pivotTableCellWrap">AAA-123</div>
            <div title="BBB-123" class="pivotTableCellWrap">BBB-123</div>        
         </div>
      </div>
</div>

我的页面中有两个 bodycells div,我希望计算第二个中的嵌套 div。 必需的输出 :- 我想要 count=2

尝试过的方法 :-

int rowCount = driver.FindElements(By.XPath("//div[@class='bodyCells[2]']//div").Count());
Console.WriteLine(rowCount);

【问题讨论】:

  • 我的代码中有两个 div 的 bodycells ..我想要上面提到的第二个嵌套 div 的计数
  • 是的,它应该在外面..但我仍然需要正确的命令
  • int rowCount = driver.FindElements(By.XPath("//input[@id='bodyCells'])[2]/div/div").Count()); Console.WriteLine(rowCount);这行得通吗
  • 您可以使用 CSS 选择器,例如 div[title$='-123'],它将找到标题以“-123”结尾的 DIVs。万一其他元素被添加到列表中并且索引发生变化,这比您的方法更脆弱。见CSS selector reference

标签: c# selenium selenium-webdriver xpath css-selectors


【解决方案1】:

您可以使用以下修改后的 XPath 来获取第二个嵌套 div 的计数

XPath: //div[@class='bodyCells']/div/div[2]/div

代码:

var rowCount = _driver.FindElements(By.XPath("//div[@class='bodyCells']/div/div[2]/div")).Count;
Console.WriteLine(rowCount);

【讨论】:

    【解决方案2】:

    根据您提供的 HTML 来计算第二个(父)&lt;div&gt; 内的嵌套子 &lt;divs&gt;,您可以使用以下任一解决方案:

    • CssSelector:

      List<string> elements = driver.FindElements(By.CssSelector("div.bodyCells div.pivotTableCellWrap[title*='-']"));
      Console.WriteLine(elements.Count);
      
    • XPath

      List<string> elements = driver.FindElements(By.XPath("//div[@class='bodyCells']//div[@class='pivotTableCellWrap' and contains(@title,'-')]"));
      Console.WriteLine(elements.Count);
      

    【讨论】:

    • @jatinpatware 查看我更新的答案并让我知道状态
    • int rowCount = driver.FindElements(By.CssSelector("div.bodyCells div.pivotTableCellWrap[title*='-']")).Count; Console.WriteLine(rowCount);在语法上正常工作,但在逻辑上没有给出正确的输出
    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多