2017-01-27 19 views
1

Я пытался найти способ подтвердить, что курсор находится в поле ввода (чтобы имитировать щелчок в этом поле).Selenium подтвердить позицию курсора

Существует сценарий, в котором сообщение об ошибке вызывается в верхней части веб-страницы, если запись в поле не проходит проверку.

Сообщение об ошибке - это гиперссылка, которая при нажатии прокручивается, чтобы указать на странице, где это поле ввода, и помещает курсор в поле.

Есть ли способ подтвердить, что курсор находится в поле?

Благодаря

ответ

2

Когда курсор находится в текстовом поле, это означает, что текстовое поле находится в фокусе или активный элемент. Capybara не дает прямого метода для этого. Однако есть несколько вариантов.

Переключение на активный элемент

Если вы падаете вниз к нижележащему драйверу Селена, вы можете retrive активного элемента:

page.driver.browser.switch_to.active_element 
=> #<Selenium::WebDriver::Element:0x34409cfc id="0.6429182184051125-3"> 

С активным элементом, вы можете проверить, что элемент вы ожидаете:

# Use Capybara to find the element you expect to be in focus 
expected_element = page.find("#field_id") 

# Get the element that is actually in focus 
active_element = page.driver.browser.switch_to.active_element 

# Check that the two elements are the same 
# Note that you need to call `native` so that you are comparing Selenium elements 
expect(active_element).to eq(expected_element) 

Использование evaluate_script

Альтернативный подход заключается в использовании JavaScript для получения подробной информации об активном элементе. Например, следующее возвращает идентификатор элемента в фокусе:

active_id = page.evaluate_script("document.activeElement.id") 
expect(active_id).to eq('field_id') 
+0

Я пробовал оба решения. Оценивая Javascript, я ожидаю найти x, но получил нуль. – Tom

+0

После добавления второго спящего режима между щелчком и ожиданием он сработал. спасибо – Tom