Как проверить, какой элемент находится в центре внимания Selenium RC? - PullRequest
7 голосов
/ 18 апреля 2010

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

Ответы [ 4 ]

6 голосов
/ 06 января 2012

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

2 голосов
/ 28 июля 2010

Я не мог заставить идею псевдокласса :focus работать, не уверен почему - таргетинг 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() являются оболочками вокруг основного списка команд Selenium. Приспособьте это к своей среде. Он оценивает индекс элемента сфокусированного элемента документа (полученный с помощью локатора DOM Javascript) и индекс элемента, который вы хотите проверить на фокус (полученный с помощью локатора XPath.) Также см. этот вопрос .

1 голос
/ 24 августа 2011

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

Если вы включите следующий скрипт https://gist.github.com/1166821 ДО того, как вы включите JQuery, тогда ваши тесты Selenium пройдут: focus тесты.

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

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

1 голос
/ 29 апреля 2010

Вы можете использовать селекторы 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.

НТН

Sam

...