Как проверить, какой элемент имеет фокус в Selenium RC?

Как проверить, какой элемент имеет фокус в Selenium RC?

4 ответов


Я не мог получить :focus идея псевдокласса для работы, не уверен, почему - targeting css=#search_input input.text согласованы, но css=#search_input input.text:focus не? Но вот что сработало для меня:

self.assertEquals(self.se.get_element_index('dom=document.activeElement'),
     self.se.get_element_index('//input[@id="search-query"]'))

это использование Python Selenium API, так что get_element_index() вызовы являются обертками вокруг списка команд core Selenium. Приспособьте это к окружающей среде. Это оценка индекса элемента элементу документа (получил с помощью JavaScript локатор дом) и индекс элемента вы хотите проверить фокус (получен с помощью локатора XPath.) Также см. этот вопрос.


ни один из других ответов не работал для меня по разным причинам, когда у меня была та же проблема. Я закончил тем, что сделал следующее (с Selenium 2.0 WebDriver, в 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);

комментарий проясняет точку путаницы, которую я имел: executeScript возвращает разные вещи, основанные на том, что вы говорите ему выполнить, что может быть довольно сложно.


вы можете использовать селекторы CSS при предоставлении локатора элементов Selenium:http://release.seleniumhq.org/selenium-core/1.0/reference.html#locators

таким образом, вы можете использовать :focus CSS псевдо-класс на селекторе, чтобы соответствовать только если элемент сфокусирован.

объедините это с verifyElementPresent действие и цель чего-то вроде следующего: css=.yourclassname:focus. Заменить yourclassname С вашим именем класса CSS, конечно, или использовать один из других CSS селекторы; важным битом является :focus в конце.

обратите внимание, что это почти наверняка не будет работать в плагине Selenium IDE Firefox. Я представляю, потому что этот плагин будет сосредоточиться. Я не мог заставить его работать в IDE (тест всегда не удался), но он работал нормально, как только я экспортировал его и запускал как тест Java.

HTH

Сэм


Я нашел решение этой проблемы и разработали простой скрипт для устранения этой проблемы при выполнении тестов. Проблема заключается в том, что собственные селекторы совпадений и запросов Вашего браузера известны операционной системе, что означает, что если Ваш браузер и вкладка веб-страницы не имеют фокуса в операционной системе, то селектор :focus не будет соответствовать никаким элементам в вашем документе. Я пошарил внутри JQuery, чтобы найти способ обойти это, и это можно сделать, просто заставив JQuery использовать Sizzle и не оптимизировать запросы селектора, используя собственные функции браузера.

Если вы включаете следующий скрипт https://gist.github.com/1166821 прежде чем включить JQuery, ваши тесты Селена пройдут :тесты фокуса.

для полной записи проблемы, решения и как запускать тесты, пожалуйста, просмотрите http://blog.mattheworiordan.com/post/9308775285/testing-focus-with-jquery-and-selenium-or

надеюсь, что это поможет другим, у кого такая же проблема.