2010-04-17 6 views

Antwort

2

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.

+0

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. –

1

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

+0

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

1

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.

6

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.

+0

+1 - Hat super funktioniert! – JOpuckman

Verwandte Themen