Как проверить, какой элемент имеет фокус в 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
надеюсь, что это поможет другим, у кого такая же проблема.