Selenium . getText Problem

pixelhead

Aktives Mitglied
Hallo zusammen,

mein Problem is es einen exakten Textausschnitt auf einer Webseite zu auszulesen.

Meine aktuelle Lösung ist mit Xpath und sie funktioniert, aber ich möchte Xpath vermeiden, entsprechend eine andere Lösung dafür haben.
Hinzu kommt, dass ich nur den vollständigen Text abgleichen kann und nicht nur einen bestimmten Textausschnitt.

Ich habe es mit cssSelector und mit der id="top" versucht und beides funktionerte nicht. Zumindest habe ich es offenbar nicht richtig hinbekommen.

Ich möchte aus diesem Textausschnitt:
Dein Username ist: username1
Nur diesen Teil:
username1

Umgebung:

openjdk 11 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

JUnit5
selenium-java-4.0.0-alpha-1
Eclipse Version: 2021-03 (4.19.0)

HTML:
[CODE lang="java" title="HTML"]<vaadin-horizontal-layout style="width: 100%; align-items: center;" id="top" slot="navi">
</iron-icon>
<iron-icon style="cursor: pointer; color: var(--lumo-primary-color); margin-right: 20px;" icon="vaadin:top-o" title="Sitename">
</iron-icon><iron-icon style="cursor: pointer; color: var(--lumo-primary-color); margin-right: 20px;" icon="vaadin:tabs" title="new window">
</iron-icon>
<span style="margin-left: auto; color: var(--lumo-primary-color); margin-right: 20px;">Your user name is: username1</span>
</vaadin-horizontal-layout>[/CODE]

So wie ich das verstehe ist das kein iron-icon.

So habe ich es bisher gelöst, so möchte ich es aber nicht haben:

Java Selenium Xpath:

[CODE lang="java" title="Selenium Java"]System.out.println("text username");

Assert.assertEquals("Dein Username ist: username1", driver.findElement(By.xpath("/html/body/vaadin-app-layout/vaadin-horizontal-layout/span")).getText());

System.out.println("Get Text: ");

System.out.println(driver.findElement(By.xpath("/html/body/vaadin-app-layout/vaadin-horizontal-layout/span")).getText());[/CODE]

Hat jemand eine Idee wie ich das lösen kann?

Vielen Dank und viele Grüße
 

KonradN

Super-Moderator
Mitarbeiter
Du willst nicht den ganzen XPath angeben? Dann wäre die Idee mit dem Element mit der id='top' doch ein Ansatz. Was hast Du denn da probiert?

Das sollte dann etwas sein wie //vaadin-horizontal-layout[@id='top']/span

Und Du kannst da nur ganze Elemente selektieren. Es gibt also nur den ganzen Text des span Elements. Aber den kannst Du dann doch weiter auswerten um dann z.B. nur das letzte Wort davon zu nutzen (Dann kann der Text davor auch übersetzt sein und Du bekommst vermutlich noch immer den Usernamen selbst).
 

pixelhead

Aktives Mitglied
Ich habe folgendes probiert:

[CODE lang="java" title="findElement by id"]Assert.assertEquals("username1", driver.findElement(By.id("top")).getText());[/CODE]

Zurück kam ein leerer String, also nichts.

Mir gefällt an Xpath nicht, dass bei einer Positionsänderung des Elements der Xpath ungültig wird und der Test angepasst werden muss. Mit einer ID ist das Element fix ansprechbar, egal wohin es zukünftig angesprochen wird.
 

KonradN

Super-Moderator
Mitarbeiter
Mir gefällt an Xpath nicht, dass bei einer Positionsänderung des Elements der Xpath ungültig wird und der Test angepasst werden muss. Mit einer ID ist das Element fix ansprechbar, egal wohin es zukünftig angesprochen wird.
Beim XPath muss man nicht den ganzen Pfad angeben. Das Beispiel von mir sollte es ja zeigen.
XPath ist eine relativ mächtige Abfragesprache.
 

KonradN

Super-Moderator
Mitarbeiter
[CODE lang="java" title="findElement by id"]Assert.assertEquals("username1", driver.findElement(By.id("top")).getText());[/CODE]

Zurück kam ein leerer String, also nichts.
Noch dazu, warum das nicht geklappt hat: Das hat dann ja das Element mit der id "top" geliefert. Das ist das Element vaadin-horizontal-layout und darauf dann getText() aufrufen gibt natürlich nichts zurück, denn in dem Element selbst ist kein Text. Das, was Du haben willst, ist ja in einem Unterlement span.
 

mihe7

Top Contributor
XPath kennt auch contains und matches, ggf. funktioniert das einfacher als sich den Text zurückgeben zu lassen.
 

pixelhead

Aktives Mitglied
Noch dazu, warum das nicht geklappt hat: Das hat dann ja das Element mit der id "top" geliefert. Das ist das Element vaadin-horizontal-layout und darauf dann getText() aufrufen gibt natürlich nichts zurück, denn in dem Element selbst ist kein Text. Das, was Du haben willst, ist ja in einem Unterlement span.
Da war ich auch unsicher, fand aber keine andere Herangehensweise für eine ID Verwnedung. Immerhin ist der Text in diesem ID Bereich. Meine Hoffnung war der Text würde dann in diesem Bereich erkannt. Nun, dem ist nicht so :)

XPath kennt auch contains und matches, ggf. funktioniert das einfacher als sich den Text zurückgeben zu lassen.
Aber es geht doch darum den Text zu prüfen oder evrstehe ich die Aussage falsch?

Ich habe immer noch nicht egfunden wie ich das anders ansprechen kann ohne dem klassischen Xpath Pfad.

Beim XPath muss man nicht den ganzen Pfad angeben. Das Beispiel von mir sollte es ja zeigen.
XPath ist eine relativ mächtige Abfragesprache.
Da bin ich gerade dran, befürchte aber die Nuss kriege ich sooo schnell nicht geknackt. Ich komme da gerade nicht mit klar.
 

pixelhead

Aktives Mitglied
Ach so, ok.

Ich bin einen Schritt weiter, aber noch nicht ganz zufrieden.

So siehts gerade aus:
[CODE lang="java" title="Assert Equals"]String[] xpathParts = new WebDriverWait(driver, Duration.ofSeconds(120, 1)).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(., 'Your user name is: ')]"))).getText().split(" ");
Assert.assertEquals("Nachname1, Vorname1 (Nummer)", xpathParts[4] + " " + xpathParts[5] + " " + xpathParts[6]);
System.out.println("Kontrollausgabe Assert Equals Name: " + xpathParts[4] + " " + xpathParts[5] + " " + xpathParts[6]);[/CODE]

Ich weiß nicht wie ich aus diesem String in meinem nun erstellten Script ab dem Freizeichen vom Doppelpunkt bis zum Schluss den String packe und vergleiche.
"Your user name is: Nachname1, Vorname1 (Nummer)"

AssertEquals also ab "Nachname1, Vorname1 (Nummer)", das als ganzes vergleichen und nicht in Stücke gerissen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Selenium . findElement . input Allgemeine Java-Themen 4
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
D Selenium - cannot find Chrome binary Allgemeine Java-Themen 6
N Ist Selenium hier das richtige Werkzeug? Allgemeine Java-Themen 1
S Selenium: WebDriverWait braucht zu lange Allgemeine Java-Themen 2
Husamoli345 Jsf-Selenium integration Allgemeine Java-Themen 43
R Java mit Selenium "Geister"Loop Allgemeine Java-Themen 1
E selenium script in Tampermonkey umschreiben Allgemeine Java-Themen 1
N Selenium ChromeDriver TimeOutException Allgemeine Java-Themen 1
1 Problem mit Selenium WebDriver findElement bei Instagram Bot Allgemeine Java-Themen 3
M Selenium JUnit Tests (Auswahl von Testmethoden auswerten) Allgemeine Java-Themen 5
R Selenium im geöffneten Browser Allgemeine Java-Themen 0
B Selenium öffnet nur den Browser Allgemeine Java-Themen 5
D Selenium WebDriver HtmlUnitDriver Problem beim Automatisieren Allgemeine Java-Themen 1
D Verwendung von Selenium Allgemeine Java-Themen 2
A Selenium HtmlUnitDriver CSS Warnings Allgemeine Java-Themen 0
X Selenium - Per Webdriver, Javascript generierte links klicken Allgemeine Java-Themen 0
M HTTP Selenium button klicken Allgemeine Java-Themen 2
J Selenium Referrer Allgemeine Java-Themen 8
T Selenium ?! Allgemeine Java-Themen 35
Q Selenium Allgemeine Java-Themen 11
S Selenium Problemchen Allgemeine Java-Themen 2
X getText undefiniert in ActionListener Allgemeine Java-Themen 5
E JTextPane.getText() funktioniert nicht Allgemeine Java-Themen 15
F Eclipse Simpelster Stringvergleich mit getText funktioniert nicht Allgemeine Java-Themen 10
H getText(); bei dynamisch generierten JTextFiled Allgemeine Java-Themen 2
M Runtime.getRuntime().exec(txt_rsync_option.getText()); Allgemeine Java-Themen 12
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben