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

Java 使用Selenium Webdriver获取div中的项目列表,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,假设我有以下几点 <div class="facetContainerDiv"> <div> <label class="facetLabel"> <input class="facetCheck" type="checkbox" /> </label> <label class="facetLabel"> <inp

假设我有以下几点

<div class="facetContainerDiv">
    <div>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
        <label class="facetLabel">
            <input class="facetCheck" type="checkbox" />
        </label>
    </div>
</div>

现在,我想根据我提供的索引在复选框上打一个复选标记。所以我写了一个如下的方法

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

我试过了

List<WebElements> elementsList =  driver.findElements(By.cssSelector(".facetContainerDiv"));
for(WebElement checkBox:elementsList) {
    int i=0;
    checkBox = elementsList.get(i);
     bla bla bla..
}
List elementsList=driver.findElements(By.cssSelector(“.facetContainerDiv”);
用于(WebElement复选框:elementsList){
int i=0;
checkBox=elementsList.get(i);
呜呜呜呜。。
}

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

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

List<WebElement> checks =  driver.findElements(By.class("facetCheck"));
// click the 3rd checkbox
checks.get(2).click();
List checks=driver.findElements(By.class(“facetCheck”);
//单击第三个复选框
检查。获取(2)。单击();

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

List<WebElement> 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
}
List elementsRoot=driver.findElements(By.xpath(“//div[@class=\“FaceContainerDiv\”]/div));
对于(int i=0;i

这里的想法是获取根元素,然后使用另一个“sub”xpath或任何您想要查找节点元素的选择器。当然,可能需要调整xpath或选择器以正确查找您想要的元素。

遵循下面与您的情况完全匹配的代码

  • 使用class作为FaceContainerDiv
  • 工业工程

    <div class="facetContainerDiv">
        <div>
    
        </div>
    </div>
    
    
    
    2.使用第二个div中的所有元素创建IList,即

    <label class="facetLabel">
       <input class="facetCheck" type="checkbox" />
    </label>
    <label class="facetLabel">
       <input class="facetCheck" type="checkbox" />
    </label>
    <label class="facetLabel">
       <input class="facetCheck" type="checkbox" />
    </label>
    <label class="facetLabel">
       <input class="facetCheck" type="checkbox" />
    </label>
    <label class="facetLabel">
       <input class="facetCheck" type="checkbox" />
    </label>
    
    
    
    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<IWebElement> 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(); 
    
            }
        }
    }
    
    使用系统;
    使用System.Collections.Generic;
    使用OpenQA.Selenium;
    使用OpenQA.Selenium.Firefox;
    使用OpenQA.Selenium.Support.UI;
    名称空间SeleniumTests
    {
    类复选框ClickWTHindex
    {
    静态void Main(字符串[]参数)
    {
    IWebDriver=新的FirefoxDriver();
    driver.Navigate().gotour(“file:///C:/Users/chery/Desktop/CheckBox.html");
    //使用**类作为FaceContainerDiv在div下创建div的接口WebElement**
    IWebElement WebElement=driver.FindElement(By.XPath(“//div[@class='FaceContainerDiv']/div”);
    //创建一个IList,并使用div下div的所有元素初始化它,其中**类为FaceContainerDiv**
    IList allcheckbox=WebElement.FindElements(By.XPath(“//label/input”);
    int RowCount=allcheckbox.Count;
    对于(int i=0;i
    或者,您可以尝试编写特定元素:

        //label[1] is the first element.
        el =  await driver.findElement(By.xpath("//div[@class=\"facetContainerDiv\"]/div/label[1]/input")));
        await el.click();
    

    更多信息可以在这里找到:

    您实际使用了列表吗?它应该是列表吗?您的意思是
    By.className()