Когда курсор находится в текстовом поле, это означает, что текстовое поле находится в фокусе или активный элемент. 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')
Я пробовал оба решения. Оценивая Javascript, я ожидаю найти x, но получил нуль. – Tom
После добавления второго спящего режима между щелчком и ожиданием он сработал. спасибо – Tom