В Selenium как найти объект "Текущий"

Я бы хотел, чтобы Selenium перемещался по меню с помощью клавиш со стрелками - начиная с нажатия на верхний пункт меню, затем нажимая "ВНИЗ", "ВНИЗ",...

Проблема в том, что вы должны всегда указывать определенный элемент для отправки "ВНИЗ".

Есть ли способ получить текущий элемент?

Я старался:

by.xpath(".")

но он сказал, что выражение было не распознано или не вернуло нужный объект.

Я ожидаю, что мне не хватает какой-то глупой уловки.

3 ответа

Решение

Не знаю более простой способ, чем доступ document.activeElement

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

В Selenium 2.0, если вы используете WebDriver чтобы запустить тесты в браузере, вы можете использовать WebDriver.TargetLocator класс, чтобы получить элемент в фокусе, в окне / фрейме:

WebDriver driver = ... // initialize the driver
WebElement currentElement = driver.switchTo().activeElement();

Если ни один элемент не находится в фокусе, активный элемент окажется body отображаемого документа, что может иметь место, например, при запуске новой страницы. Когда вы вызываете методы, такие как click, sendKeys и т.д. вы найдете WebElement возвращенный вышеупомянутым вызовом всегда будет представлять элемент в фокусе.

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

В питоне:

element = driver.switch_to.active_element

В Ruby/Capybara:

page.driver.browser.switch_to.active_element

Обратите внимание, что это возвращает Selenium::WebDriver::Element не Capybara::Node::Element.

Другие вопросы по тегам