2016-05-10 8 views
0

Ich verwende Chrome-Treiber und Selen mit Java.Selenium - Searching Element von xPath wird während der Ausführung nicht gefunden, aber es wird im Browser gefunden

Dies ist auf meinem Java-Code. Es wird ausgeführt, während ich auf der jeweiligen Seite bin ich interessiert bin.

driver.findElement(By.xpath("//input[@name='firstName']")).sendKeys("John"); 

Dies ist auf der Website, auf der jeweiligen Seite.

Das Problem ist nicht einmal über die Einstellung des Textes auf die Eingabe, es ist, dass es das Eingabefeld überhaupt nicht findet. Hier ist der Fehler

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name='firstName']"} 
Command duration or timeout: 20.04 seconds 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 16:57:40' 

Wie Sie aus dem Fehler sehen kann ich implizite Wartezeit von 20 Sekunden und ich kann sehen, dass die Seite und Felder während dieser Zeit geladen haben. Also die komische Sache ist, dass, wenn ich Chrom öffnen und inspizieren Element und Suche nach xPath, mit dem gleichen genauen Befehl kann ich das Feld finden (Auf der gleichen Seite, die mein Java auf dem gleichen Chromfenster abgestürzt). Ich kann alle anderen Elemente außer dem Eingabefeld finden.

Gibt es eine Möglichkeit, dies zu beheben? Werden Eingabefelder durch Selen nicht unterstützt ?! Ich bin nicht sicher, was ich annehmen soll, irgendwelche Ideen sehr geschätzt!

+2

vielleicht Ihre Eingabe ist in einem Iframe. Sie müssen Ihren Treiber wechseln, um Elemente in diesem Frame zu inspizieren, bevor Sie versuchen, das Element zu finden. –

+0

Ja, das ist es, und mir war nicht einmal bewusst, dass ich das tun sollte. Spot auf! Vielen Dank! – Iordanis

+0

Manchmal kann ein anderer Fehler sein. Also habe ich den Markierer nicht gepostet, nur gebeten, den Rahmen zu überprüfen. Jetzt habe ich ein Beispiel für die Verwaltung von Iframes in Ihren Tests veröffentlicht. Viel Glück! –

Antwort

1

Sie müssen Iframes Umgang mit Ihrem Element Acess:

// This way allows you to select an iframe using 'By' and access it. 
driver.switchTo().frame(driver.findElement(By.id("frameId"))); 

// Now you can only handle the iframe elements, like your request 
driver.findElement(By.xpath("//input[@name='firstName']")).sendKeys("John"); 

// After execute all that you need inside the iframe, 
// returns you to default html, outside the iframe. 
driver.switchTo().defaultContent(); 
Verwandte Themen