Java Selenium Element wird nicht gefunden?
Ich entwickel momentan einen Webbot mit der Selenium Library für Java. Ich hatte das Problem schon öfters und zwar, dass ich mit einem xpath auf ein element zugreifen/klicken wollte und ich dann eine NoSuchElelementException bekommen habe, obwohl der xpath gestimmt hat, was ich in dem Browser, wo das Programm aufgeführt wurde, auch nochmals überprüft habe. Ich hoffe, dass mir jemand weiterhelfen kann. Danke im Vorraus.
1 Antwort
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
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.
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ß
@AldoradoXYZ das Problem hat sich mithilfe actions.moveByOffset(); doch irgendwie lösen können. Aber danke für deine Hilfsbereitschaft :D
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ß
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
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ß
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)