Solución:
Siga el código a continuación que coincida exactamente con su caso.
- Cree una interfaz del elemento web para el div bajo div con clase como facetContainerDiv
es decir, para
<div class="facetContainerDiv">
<div>
</div>
</div>
2. Cree una IList con todos los elementos dentro del segundo div, es decir, para,
<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. Acceda a cada casilla de verificación utilizando el índice.
Encuentre el código a continuación
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();
}
}
}
No estoy seguro de si su declaración findElements obtiene todos los divs. Intentaría lo siguiente:
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
}
La idea aquí es que obtenga el elemento raíz y luego use otro xpath ‘sub’ o cualquier selector que desee para encontrar el elemento de nodo. Por supuesto, es posible que sea necesario ajustar el xpath o el selector para encontrar correctamente el elemento que desea.
Estás pidiendo todos los elementos de la clase. facetContainerDiv
, de los cuales solo hay uno (su div más externo). Por qué no hacerlo
List<WebElement> checks = driver.findElements(By.class("facetCheck"));
// click the 3rd checkbox
checks.get(2).click();