Saltar al contenido

Obtener una lista de elementos dentro de div usando Selenium Webdriver

Solución:

Siga el código a continuación que coincida exactamente con su caso.

  1. 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();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *