Wie kann ich testen, welches Element in Selenium RC im Fokus steht?Wie kann ich testen, welches Element in Selenium RC den Fokus hat?
Antwort
Ich konnte nicht die :focus
Pseudo Idee zu arbeiten, nicht sicher, warum - Targeting css=#search_input input.text
abgestimmt, aber css=#search_input input.text:focus
nicht? Aber hier ist das, was für mich gearbeitet:
self.assertEquals(self.se.get_element_index('dom=document.activeElement'),
self.se.get_element_index('//input[@id="search-query"]'))
Dies wird die Python Selenium API verwenden, so dass die get_element_index()
Anrufe sind Wrapper um den Kern Selenium Befehlsliste. Passen Sie dies an Ihre Umgebung an. Es evaluiert den Elementindex des fokussierten Elements des Dokuments (erhalten mit einem Javascript DOM-Locator) und den Elementindex des Elements, das für den Fokus getestet werden soll (erhalten mit einem XPath-Locator). Siehe auch this question.
Sie können CSS-Selektoren verwenden, wenn ein Element Locator Selen bietet: http://release.seleniumhq.org/selenium-core/1.0/reference.html#locators
Daher können Sie die :focus
CSS Pseudo-Klasse auf dem Wähler nur verwenden, um übereinstimmen, wenn das Element fokussiert ist.
Kombinieren Sie das mit einer verifyElementPresent
Aktion und einem Ziel von etwa so: css=.yourclassname:focus
. Ersetzen Sie yourclassname
natürlich mit Ihrem CSS-Klassennamen, oder verwenden Sie einen der anderen CSS-Selektoren. das wichtige Bit ist die :focus
am Ende.
Beachten Sie, dass dies fast sicher nicht im Selenium IDE Firefox-Plugin funktioniert. Ich stelle mir das vor, weil dieses Plugin stattdessen den Fokus hat. Ich konnte es nicht in der IDE arbeiten (Test immer fehlgeschlagen), aber es funktionierte gut, sobald ich es exportiert und es als Java-Test ausgeführt.
HTH
Sam
Ich markiere dies als die Antwort, da es funktioniert, aber ich konnte es nicht wirklich für mich arbeiten. Ich benutze Selen RC, ich kann sehen, dass das Element fokussiert ist (weil ich ein *: focus {background: pink} zu meinem css hinzugefügt habe), aber isElementPresent gibt immer false zurück. – hwiechers
Ich habe die Lösung für dieses Problem gefunden und ein einfaches Skript entwickelt, um dieses Problem beim Ausführen der Tests zu beheben. Das Problem liegt darin, dass die nativen Match- und Query-Selektoren Ihres Browsers betriebssystemabhängig sind. Das bedeutet, dass der Fokus-Selektor nicht mit BELIEBIGEN Elementen in Ihrem Dokument übereinstimmt, wenn Ihr Browser und die Registerkarte der Webseite den Fokus innerhalb des Betriebssystems haben. Ich habe in JQuery herumgestöbert, um einen Umweg zu finden, und zwar indem ich JQuery einfach dazu zwinge, Sizzle zu verwenden und die Selektorabfragen nicht mit den nativen Funktionen des Browsers zu optimieren.
Wenn Sie das folgende Skript https://gist.github.com/1166821 einschließen, BEVOR Sie JQuery einschließen, werden Ihre Selenium-Tests die: Fokus-Tests bestehen.
Eine vollständige aufzuschreiben der Ausgabe, die Lösung und wie Tests ausführen, finden Sie in http://blog.mattheworiordan.com/post/9308775285/testing-focus-with-jquery-and-selenium-or
Hoffnung, dass andere, die haben das gleiche Problem hilft.
Keine der anderen Antworten funktionierte für mich, aus verschiedenen Gründen, als ich das gleiche Problem hatte. Am Ende habe ich folgendes gemacht (mit dem Selenium 2.0 WebDriver, in Java).
WebDriver driver = new FirefoxDriver();
String elScript = "return document.activeElement;";
// Note that the executeScript call returns a WebElement,
// so you can do quite a lot with the result.
WebElement focuseedEl = (WebElement) ((JavascriptExecutor) driver).executeScript(elScript);
Der Kommentar verdeutlicht einen Punkt der Verwirrung hatte ich: ExecuteScript verschiedene Dinge wieder auf, was Sie sagen, es auszuführen, was ziemlich schwierig sein könnte.
+1 - Hat super funktioniert! – JOpuckman
- 1. Testen, welches Element den Fokus hat, wenn man es verloren hat
- 2. Wie kann ich feststellen, welches Element beim Laden der Seite den Fokus hat? Ist das möglich?
- 3. Selenium RC: Wie starte ich interaktives Testen mit mehreren Browsern
- 4. Wie ermittelt man, welches Element den Fokus in blur() erhält?
- 5. Testen, ob eine Eingabe den Fokus hat
- 6. Wie finde ich heraus, welches Objekt gerade Fokus hat?
- 7. Wie starte ich Selenium IDE Skripte in Selenium RC?
- 8. So legen Sie fest, welches Steuerelement den Fokus hat Anwendungsstart
- 9. Gibt es eine Möglichkeit zu wissen, welches Element in einer WPF-Anwendung den Fokus hat?
- 10. Wie ermitteln, welches Steuerelement in Formular Fokus hat?
- 11. Wie kann ich überprüfen, ob meine Anwendung den Fokus hat?
- 12. Wie ermittelt man, welches Element den Ereignis-Listener ausgelöst hat?
- 13. Javascript blur event - Gibt es eine Möglichkeit zu erkennen, welches Element nun den Fokus hat?
- 14. Wie finde ich heraus, welches Steuerelement den Fokus in .NET Windows Forms hat?
- 15. Wie starte ich Google Chrome mit Selenium RC?
- 16. Benutzer-Agent in Selenium RC
- 17. Unterstützt Selenium RC IE8?
- 18. Wie kann ich überprüfen, ob meine Element ID den Fokus hat?
- 19. Selenium RC Probleme mit XPath
- 20. Selenium RC getTitle Methode
- 21. AngularJS, wie mache ich die UI davon abhängig, welches Feld den Fokus hat?
- 22. Wie kann ich dynamische Bildinhalte mit Selenium testen?
- 23. Kann Selenium mobile Webapps testen?
- 24. Wie weiß man, welches Fenster den Fokus hat und wie man es ändert?
- 25. Selenium RC - Browser-Cookie deaktivieren
- 26. jQuery Kontextmenü - Finden, welches Element ausgelöst hat
- 27. Wie kann ich feststellen, welches Element in einer Liste eine any() -Funktion ausgelöst hat?
- 28. Selenium-Webtreiber oder Selen RC
- 29. Selenium & Django testen
- 30. Wie löschen Sie den Fokus in Javascript?
Leider erhält get_element_index nur den Index des Elements innerhalb des übergeordneten Elements. Wenn Sie beispielsweise zwei divs A und B haben, von denen jedes ein Textfeld als einziges Kind enthält, dann werden, wenn das Textfeld von A ausgewählt ist, beide get_element_index-Aufrufe in Ihrem Beispielcode 0 zurückgeben, so dass Sie ein falsches Ergebnis erhalten positiv. –