So iterieren Sie eine Liste von WebElements und drucken die Werte einzeln aus, um eine Aktion auszuführen

  • 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());
    }
    

    Ich möchte die Listenelemente einzeln drucken und einige Aktionen ausführen. Ich kann den in der Liste enthaltenen Wert jedoch nicht ermitteln.

    Folgendes bekomme ich in der Konsole:

    FirefoxDriver: Firefox auf 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]
    

    Drucken Sie den ersten Wert in der Liste. Es sollte anstelle von LISTVALUE im folgenden xpath // div [@ class = 'datepicker'] / div / table / tbody / tr / td / table / tbody [2] / tr / td [@ class = '' oder platziert werden @ class = 'datepickerSaturday' oder @ class = 'datepickerSunday'] / a / span [enthält (text (), "LISTVALUE")], um eine Klickaktion auszuführen

  • Hier ist ein gutes Beispiel dafür, wie ich aus einem Dropdown-Menü auswähle:

    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");
        }
    }
    

    Was ist der Grund für die Verwendung der Methode "sleep ()"?

    Wenn Sie die Erfahrung eines Benutzers simulieren, der Keydowns in einem Dropdown-Menü ausführt, möchten Sie nicht, dass es so schnell geht, dass Sie es sehen können.

    Ahh, das ist nur zum Demo. Ich verstehe, dass dies auch ohne Schlaf funktioniert, so dass beim Ausführen von _x_ Tests (_x_> 1000) die Ausführungszeit nicht unnötig verlängert wird.

    Das ist richtig. Wenn ich Tests mache, nehme ich Videos auf und laufe mit mehreren Threads. Daher ist Geschwindigkeit für mich nicht so wichtig. Daher ist diese Technik für das Debuggen mithilfe der Videowiedergabe sehr nützlich.

  • Es gibt Ihnen das Webelement, setzen Sie einfach .getText (), wenn Sie solchen Code sehen. Tun-

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

    Okay, diese Frage wurde vor Ewigkeiten gestellt und ich habe sie jetzt gesehen

    Das ist in Ordnung, es gibt nie einen schlechten Zeitpunkt für eine gute Antwort. Die Frage ist - ist das eine gute Antwort? Ich habe das Gefühl, es könnte mehr Liebe gebrauchen, bevor es eine * großartige * Antwort ist. =)

    könnte `ListIterator` spezifischer sein? Imaginäre Bonuspunkte für die Verwendung von "hasNext".

  • @sathiya: Welche Art von Liste möchten Sie iterieren (Dropdown..etc)?

    Unten finden Sie die Methode zum Abrufen von Daten aus der Tabelle. Hoffe das wird dir helfen.

    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());
    }
    

    Für die Iteration der Dropdown-Liste können Sie den folgenden Code verwenden.

    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());
    } 
    

    Für Daten, die sich in einer Tabelle befinden. Xpath für table- / html / body / div [4] / div / div [2] / div [3] / div / div [5] / div [2] / div / ul / li / div / div / div / Tabelle / tbody / tr / td / Tabelle. Ich möchte nicht, dass alle Zeilen gedruckt werden, da nur die zukünftigen Daten auf der Seite verfügbar sind. Der übliche Xpath für die Daten lautet - "// div [@ class = 'datepicker'] / div / table / tbody / tr / td / table / tbody [2] / tr / td [@ class = '' oder @class = 'datepickerSaturday' oder @ class = 'datepickerSunday'] / a / span ". So drucken Sie die Werte für diesen Fall.

    @sathiya Könnten Sie die URL der Anwendung angeben oder eine Beispielanwendung angeben, damit wir das Problem umgehen können? Und bitte arbeiten Sie Ihre Anfrage aus. Als ich den obigen Code in meiner Anwendung verwendet habe, habe ich alle Daten erhalten (die alle angezeigt werden). Ergebnis: 'Mo Tu We Th Fr Sa Su 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 '

    List myList = myDriver.findElement (By.xpath ("")); System.out.println (myList.size ()); für (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 ");
            }
    
        }
    

    Was trägt dies zu den bestehenden und akzeptierten Antworten bei? Für eine Antwort auf eine alte Frage ist es hilfreich, mehr als nur Code hinzuzufügen.

    Hey da JaiHind! Was macht dieser Code? Wie ist das besser als die akzeptierte Antwort?

  • Hinzufügen 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 = '' oder @ class = 'datepickerSaturday' oder @ class = 'datepickerSunday'] / a / span "));
    
    Iterator itr = allLinks.iterator ();
    while (itr.hasNext ()) {
        System.out.println (itr.next () **. GetAttribute ("src") **);
    
    }}
    

Lizenz unter CC-BY-SA mit Zuschreibung


Inhoud eerder gedateerd 26.06.2020 09:53