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

时间:2013-03-21 01:32:49

标签: java selenium selenium-webdriver

说我有以下

<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 =“facetContainerDiv”中的所有元素?

我试过

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

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

4 个答案:

答案 0 :(得分:5)

请按照以下与您的案例完全匹配的代码。

  1. 为div下的div创建一个web元素的界面,其中 class facetContainerDiv
  2. <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(); 
    
            }
        }
    }
    

答案 1 :(得分:4)

我不确定你的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
}

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

或者,您可以尝试编写特定元素:

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

更多信息可以在这里找到:https://www.browserstack.com/guide/locators-in-selenium