2012-03-24 13 views
1

Es ist ziemlich häufig für eine Webanwendung, Javascript zu verwenden, um auf ein Textfeld Onload zu konzentrieren. Auf einer Anmeldeseite können wir beispielsweise Javascript verwenden, um auf das Feld "Benutzername" zu fokussieren.Handle Javascript-Fokus bei der Verwendung von sendKeys in WebDriver

Wenn ich WebDriver mit FirefoxDriver verwende, verwende ich sendKeys, um diese Felder zu füllen. Die meiste Zeit wird die Javascript-Fokusfunktion jedoch ausgeführt , während WebDriver tatsächliche Zeichen sendet, so dass meine Eingabe für ein anderes Feld (z. B. das Kennwortfeld) teilweise ist und der Rest in das fokussierte Feld geht.

Wie soll ich mit diesem Fall umgehen? Nach meinem Wissen wird die blockierende API zurückgegeben, wenn der Seiteninhalt geladen wird, und nicht, wenn die Javascript-Ausführung beendet ist. Diese Situation ist also verständlich. Ich denke jedoch nicht, dass die Verwendung von "Warten" eine vernünftige Lösung ist, da es zu viel Einfluss auf die Testentwicklung bedeutet.

+0

Keine tatsächliche Antwort, aber Sie könnten versuchen, den Wert des Feldes "direkt" von Javascript als eine Art Workaround. In Java wäre das: '((JavascriptExecutor) -Treiber) .executeScript (" document.getElementById ('someId'). Value = 'irgendein Wert' ");' –

+0

Interessante Idee, Slanec. Allerdings ist es nicht der Zweck, WebDriver zu verwenden;) – giangnn

+0

Leider haben Sie Recht. Meine beste Vermutung, um dies zu lösen, besteht darin, auf 'driver.switchTo(). ActiveElement()' zu warten, um das onload-fokussierte Element zurückzugeben. Einfach gesagt, Sie müssen Webdrive als Mensch langsam machen :). –

Antwort

0

Ich kam mit drei möglichen Lösungen, keiner von ihnen ist garantiert tatsächlich an die Arbeit:

  1. Does document.readyState Rückkehr "complete" ist Javascript? Wenn nicht, könnten Sie nach jeder click() darauf warten.
  2. Sie können warten, bis driver.switchTo().activeElement(); (die das aktive Element zurückgibt) zurückgibt Ihr Textfeld, und beginnen Sie Ihre Eingabe danach. Ich nehme an, du solltest danach auch driver.switchTo().defaultContent(); anrufen, bin mir aber nicht sicher. Ein ähnlicher Ansatz wäre document.activeElement.
  3. Ähm, das ist auch etwas hacky. Schreiben Sie Ihre eigene Methode sendKeys, die das Element findet, sich daran erinnert und dann jeweils einen Schlüssel aus der gewünschten Zeichenfolge sendet. Da WebDriver sicherstellt, dass der Fokus auf dem Anfang der Eingabe liegt, sollte es funktionieren.
Verwandte Themen