将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中包含的所有类名。
我希望这是有道理的(我希望有人可以提供帮助):)
非常感谢
答案 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());