webdriver - 计算特定div中包含的所有类名

时间:2014-09-15 11:35:42

标签: c# selenium selenium-webdriver

将webdriver与c#一起使用,我试图计算特定下拉菜单中包含的所有项目(它不是选择元素)。问题是,我的页面上有许多其他元素包含相同的类名,所以我需要的是一种仅在特定div中过滤类名的方法。

以下是我正在查看的代码示例:

<div id="DropDownMenu1">
<span class="drop-combobox">
<div class="drop-item-content">list item number 1</div></div>
<div class="drop-item-content">list item number 2</div></div>
<div class="drop-item-content">list item number 3</div></div>
</span>
</div>

在我的整个页面中,我还会有其他类似的下拉菜单(所有类名都相同 - 只是div的名称不同):

  <div id="DropDownMenu2">
    <span class="drop-combobox">
    <div class="drop-item-content">list item number 1</div></div>
    <div class="drop-item-content">list item number 2</div></div>
    <div class="drop-item-content">list item number 3</div></div>
    </span>
    </div>

 <div id="DropDownMenu3">
    <span class="drop-combobox">
    <div class="drop-item-content">list item number 1</div></div>
    <div class="drop-item-content">list item number 2</div></div>
    <div class="drop-item-content">list item number 3</div></div>
    </span>
    </div>

我能够使用(来自内存)计算这样的事情:

driver.FindElements(By.ClassName("drop-item-content").Count());

麻烦的是,我的计数返回名为“drop-item-content”的所有类,但我需要计算1个特定div中包含的所有类名。

我希望这是有道理的(我希望有人可以提供帮助):)

非常感谢

3 个答案:

答案 0 :(得分:3)

你试图获得第一个,带有id的hole元素,然后你用元素过滤(在这种情况下为div,因为你不想要它的跨度)然后,使用类名。不要求类名因为你想要所有的Div,以防选择器失败,在类名中使用它。 CssSelector必须工作。尝试下一行:

Driver.FindElements(By.CssSelector("#DropDownMenu3 div.drop-item-content").count();

答案 1 :(得分:2)

从头到尾:

WebElement masterDiv = driver.FindElements(By.Id("DropDownMenu3"));
// Find subelements of that element
int count = masterDiv.FindElements(By.XPath("./div[@class="drop-item-content"])).Count();

答案 2 :(得分:1)

尝试使用XPath查找所有元素,

//div[@id='DropDownMenu1']//div[@class='drop-item-content']

FindElements将保存指定div中的所有类,

driver.FindElements(By.xpath("//div[@id='DropDownMenu1']//div[@class='drop-item-content']").Count());