Java Selenium Element wird nicht gefunden?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Hey MrAlpxka,

das "Problem" kenne ich.

Versuch mal bitte "copy full XPath" und nutze das.

Ansonsten kannst Du auch versuchen den vollen XPath zu benutzen und dann am Ende Elemente zu entfernen, bis "etwas" ausgelöst wird.

Kann zum Beispiel sein, dass dein hart kodierter XPath nicht passt, weil die aktuelle Seite etwas anders aufgebaut ist. Zum Beispiel wenn da plötzlich andere Array-Elemente (Listenelemente) sind.

Ansonsten zeig mal die Seite und deinen XPath :)

Gruß und viel Erfolg

Woher ich das weiß:eigene Erfahrung

verreisterNutzer  22.08.2020, 23:19

Danke für deine Antwort. Ich benutze den kompletten xpath schon, weil der "normale" xpath, der manchmal "abgekürzt" ist, nicht funktioniert hat. Ich schreib einen Bot, der auf der GMX Website einloggt, auf emails geht und die erste email anklicken soll. Das mit der ersten email in der Liste klappt nicht so, obwohl der xpath immer gleich ist. Mein xpath ist: /html/body/div[2]/div[3]/div[2]/div/div[1]/div/form/div[3]/div/div/table/tbody/tr[1]/td[2]/div[1]/div[1]

P.S. ich benutze den chromedriver(neuste version)

0
verreisterNutzer  22.08.2020, 23:28
@verreisterNutzer

Ich habe auch schon probiert, dass ich das mit Actions mache und dann einen Point angebe, relativ zu einem anderen Element, aber das hat auch nicht wirklich funktioniert. Mit einem cssSelector funktioniert es auch nicht(ich habe den div mit einem title Attribut, das immer gleich ist und einmal existiert, gesucht, aber das hat auch nicht funktioniert.

0
AldoradoXYZ  23.08.2020, 01:55
@verreisterNutzer

Puh, also Du bist dann schon eingeloggt.

Wenn dir das keiner beantwortet, dann gucke ich morgen mal. Ist mir grad etwas spät.

Falls ich das vergessen sollte, kannste gerne noch mal "pingen" :D

Gruß

1
verreisterNutzer  29.08.2020, 01:06
@AldoradoXYZ

@AldoradoXYZ das Problem hat sich mithilfe actions.moveByOffset(); doch irgendwie lösen können. Aber danke für deine Hilfsbereitschaft :D

0
AldoradoXYZ  29.08.2020, 01:11
@verreisterNutzer

Huch, "actionsmoveByOffset"? Das habe ich noch nie benutzt.

Ich bin immer mit dem full xPath hingekommen. Ab und an war der "dynamisch" und musste dann halt zur Laufzeit angepasst werden, aber das hat dann schon gereicht.

Aber gut, dass es geklappt hat.

Gruß

0
verreisterNutzer  29.08.2020, 23:54
@AldoradoXYZ

Ich bin jetzt komplett dahinter gekommen, was der Fehler war. Aber noch kurz was zu actions.moveByOffset().

Man kann ein Actions Objekt erstellen, mit dem man Sachen machen kann, wie z.B. rechtsklicken, doppeltklicken oder den mauszeiger verschieben(es wird nicht dein "echter" mauszeiger verschoben, aber man kann einen virtuellen Mauszeiger, den man nicht sehen kann, verschieben). Das Objekt erstellt man mit: Actions actions = new Actions(webdriver);. Manchmal geht auch actions = (Actions) webdriver; also dass man den webdriver castet. So habe ich dann einfach die punkte auf dem Bildschirm angeklickt, ohne den Pfad anzugeben, sondern die koordinaten.

Also jetzt die Lösung. Die Elemente, die ich anklicken wollte, waren innerhalb eines iFrames. Wenn ich den xPath kopiert habe, habe ich den xPath zu dem Element innerhalb des iFrames kopiert. Ein iFrame beeinhaltet ja sowas wie noch eine website in einer website. Man muss als erstes in den iFrame switchen mit:

WebElement frame = driver.findElement(By.xpath("path/zum/iFrame"));

driver.switchTo().frame(frame);

driver.findElement(By.xpath("path/innerhalb/des/iFrames").click();

Ich glaube, zurück kommt man, indem man driver.switchTo().defaultContent(); benutzt.

LG

0
AldoradoXYZ  29.08.2020, 23:56
@verreisterNutzer

Das ist gut, dass Du die Lösung noch postest, das hilft anderen in Zukunft sicher mal.

Und ja IFrames, daran habe ich gar nicht mehr gedacht. Wer benutzt schon noch IFrames xD

Gruß

1