Cómo iterar una lista de WebElements e imprimir los valores uno por uno para realizar alguna acción

  • List allLinks = driver.findElements(By.xpath("//div[@class='datepicker']/div/table/tbody/tr/td/table/tbody[2]/tr/td[@class='' or @class='datepickerSaturday' or @class='datepickerSunday']/a/span"));
    
    Iterator itr = allLinks.iterator();
    while(itr.hasNext()) {
        System.out.println(itr.next());
    }
    

    Quiero imprimir los elementos de la lista uno por uno y realizar algunas acciones. Pero no puedo obtener el valor presente en la lista.

    Esto es lo que obtengo en la consola:

    [[FirefoxDriver: firefox en MAC (81e15827-9357-0341-9c72-5b26054f780d)]

    XPath: -

    //div[@class='datepicker']/div/table/tbody/tr/td/table/tbody[2]/tr/td[@class='' or @class='datepickerSaturday' or @class='datepickerSunday']/a/span]
    

    Imprime el primer valor de la lista. Debe colocarse en lugar de LISTVALUE en el siguiente xpath // div [@ class = 'datepicker'] / div / table / tbody / tr / td / table / tbody [2] / tr / td [@ class = '' o @ class = 'datepickerSaturday' o @ class = 'datepickerSunday'] / a / span [contiene (text (), "LISTVALUE")] para realizar la acción de clic

  • Aquí hay un buen ejemplo de cómo selecciono de un menú desplegable:

    public Boolean selectByText( String text ) {
        WebElement dropDown = driver.findElement( By.xpath( ".//dropdown/path" ) );
        dropDown.click();
        List allOptions = dropDown.findElements(By.xpath(".//option"));
        for ( WebElement we: allOptions) { 
            dropDown.sendKeys( Keys.DOWN ); //simulate visual movement
            sleep(250);       
            if ( we.getText().contains( text ) ) select.selectByVisibleText("Value1");
        }
    }
    

    ¿Cuál es la razón para usar el método `sleep ()`?

    Cuando está simulando la experiencia de un usuario haciendo keydown en un menú desplegable, no quiere que vaya tan rápido que pueda verlo.

    Ahh, esto es solo para una demostración. Entiendo que esto también funcionará sin dormir, por lo que cuando se ejecutan pruebas _x_ (_x_> 1000), su tiempo de ejecución no es innecesario.

    Así es. Cuando hago pruebas, grabo videos y ejecuto varios subprocesos, por lo que la velocidad no me importa tanto. Por lo tanto, esta técnica es realmente útil para depurar mediante la reproducción de video.

  • Le está dando el elemento web, simplemente ponga .getText () cada vez que vea dicho código. Hacer-

    Iterator itr = allLinks.iterator();
    while(itr.hasNext()) {
        System.out.println(itr.next().getText());
    }
    

    Está bien, esta pregunta se hizo hace mucho tiempo y vi esto ahora

    Está bien, nunca es un mal momento para una buena respuesta. La pregunta es: ¿es esta una gran respuesta? Siento que podría necesitar más amor antes de que sea una * gran * respuesta. =)

    ¿Podría "ListIterator" ser más específico? Puntos de bonificación imaginarios por usar "hasNext".

  • @sathiya: ¿Qué tipo de lista quieres iterar (desplegable, etc.)?

    A continuación se muestra el método para obtener datos de la tabla. Espero que esto te ayudará.

    WebElement table = driver.findElement(By.xpath("your path"));
    List rows = table.findElements(By.tagName("your tagName"));
    java.util.Iterator i = rows.iterator();
    while(i.hasNext()) {
        WebElement row = i.next();
        System.out.println(row.getText());
    }
    

    Para iterar la lista desplegable, puede usar el siguiente código.

    List drop = driver.findElements(By.name("customerId"));
    java.util.Iterator i = drop.iterator();
    while(i.hasNext()) {
        WebElement row = i.next();
        System.out.println(row.getText());
    } 
    

    Para fechas que están dentro de una mesa. XPath para table- / html / body / div [4] / div / div [2] / div [3] / div / div [5] / div [2] / div / ul / li / div / div / div / table / tbody / tr / td / table. No quiero que se impriman todas las filas, porque solo las fechas futuras estarán disponibles en la página. El XPath común para las fechas será - "// div [@ class = 'datepicker'] / div / table / tbody / tr / td / table / tbody [2] / tr / td [@ class = '' o @class = 'datepickerSaturday' o @ class = 'datepickerSunday'] / a / span ". Cómo imprimir los valores para este caso.

    @sathiya ¿Podría proporcionar la URL de la aplicación o dar una aplicación de muestra para que podamos solucionarlo? Y por favor elabora tu consulta. Cuando utilicé el código anterior en mi aplicación, obtuve todas las fechas (que se muestran todas). Resultado: 'Lu Ma Mi Ju Vi Sa Do 24 25 26 27 28 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 '

    Lista myList = myDriver.findElement (By.xpath ("")); System.out.println (myList.size ()); para (int i = 0; i

  •  List elements = driver.findElements(By.xpath("//ul[@id='ctl00_MainContent_view1Extender_SearchBarAutoComplete2_2_completionListElem']//li"));
        java.util.Iterator program = elements.iterator();
        while (program.hasNext()) {
            String values = program.next().getText();
    
            if(!values.equals("null"))
            {
                testStepPassed("Field should display all the Programs defined for the provider " +values);
            }
            else
            {
                testStepFailed("Field is not display all the Programs defined for the provider ");
            }
    
        }
    

    ¿Qué agrega esto a las respuestas existentes y aceptadas? Para obtener una respuesta a una pregunta anterior, es útil agregar más que solo código.

    ¡Hola, JaiHind! ¿Qué hace este código? ¿cómo es esto mejor que la respuesta aceptada?

  • Añadir System.out.println (itr.next (). GetAttribute ("src"));

    List allLinks = driver.findElements (By.xpath ("// div [@ class = 'datepicker'] / div / table / tbody / tr / td / table / tbody [2] / tr / td [@ class = '' o @ class = 'datepickerSaturday' o @ class = 'datepickerSunday'] / a / span "));
    
    Iterador itr = allLinks.iterator ();
    while (itr.hasNext ()) {
        System.out.println (itr.next () **. GetAttribute ("src") **);
    
    }
    

Licencia bajo CC-BY-SA con atribución


Contenido fechado antes 26/06/2020 9:53