使用Selenium Webdriver获取div中的项目列表

说我有以下内容

现在我想根据我提供的索引在复选框上打勾。 所以我写了一个像下面这样的方法

如何访问div class =“facetContainerDiv”中的所有元素?

我试过了

 List elementsList = driver.findElements(By.cssSelector(".facetContainerDiv")); for(WebElement checkBox:elementsList) { int i=0; checkBox = elementsList.get(i); bla bla bla.. } 

在上面的代码中,elementsList只有一个“type”元素为null。

请遵循以下与您的案例完全匹配的代码。

  1. 为div下的div创建一个web元素的接口, facetContainerDiv

即为

 

2.创建一个包含第二个div内所有元素的IList,即:

      

3.使用索引访问每个复选框

请在下面找到代码

 using System; using System.Collections.Generic; using OpenQA.Selenium; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.Support.UI; namespace SeleniumTests { class ChechBoxClickWthIndex { static void Main(string[] args) { IWebDriver driver = new FirefoxDriver(); driver.Navigate().GoToUrl("file:///C:/Users/chery/Desktop/CheckBox.html"); // Create an interface WebElement of the div under div with **class as facetContainerDiv** IWebElement WebElement = driver.FindElement(By.XPath("//div[@class='facetContainerDiv']/div")); // Create an IList and intialize it with all the elements of div under div with **class as facetContainerDiv** IList AllCheckBoxes = WebElement.FindElements(By.XPath("//label/input")); int RowCount = AllCheckBoxes.Count; for (int i = 0; i < RowCount; i++) { // Check the check boxes based on index AllCheckBoxes[i].Click(); } Console.WriteLine(RowCount); Console.ReadLine(); } } } 

我不确定你的findElements语句是否能获得所有div。 我会尝试以下方法:

 List elementsRoot = driver.findElements(By.xpath("//div[@class=\"facetContainerDiv\"]/div)); for(int i = 0; i < elementsRoot.size(); ++i) { WebElement checkbox = elementsRoot.get(i).findElement(By.xpath("./label/input")); checkbox.click(); blah blah blah } 

这里的想法是你得到根元素然后使用另一个'sub'xpath或你喜欢的任何选择器来找到node元素。 当然,可能需要调整xpath或选择器以正确找到所需的元素。

你要求的是facetContainerDiv类的所有元素,其中只有一个(你最外层的div)。 为什么不呢

 List checks = driver.findElements(By.class("facetCheck")); // click the 3rd checkbox checks.get(2).click();