Выберите сфокусированный элемент в Selenium - PullRequest
1 голос
/ 05 апреля 2019

С чем я имею дело

В одном из моих тестов мне нужно взаимодействовать с всплывающим полем ввода, которое очень трудно выбрать с помощью обычного селектора CSS или xpath.Однако я знаю, что это всплывающее окно будет иметь фокус.

Как я могу использовать тот факт, что он сфокусирован, чтобы правильно утверждать, что поле ввода содержит некоторый текст?

Псевдокодчто я ищу:

element = driver.find_element_by_FIND_THE_ELEMENT_WITH_FOCUS
assert elem.text == "foobar"

Частичные решения, с которыми я сталкивался:

Возможно, рабочее решение на Ruby:

element = @driver.find_element :css, 'input:focus'
sleep(3)

element.send_keys "Hello WebDriver!"
assert_equal(element.attribute('value'),"Hello WebDriver!")

Получение сфокусированного элемента с помощью jQuery:

var focus = $(document.activeElement);

Не могли бы вы предоставить решение в python , пожалуйста?

РЕДАКТИРОВАТЬ:

Вот HTML-код элемента:

<div class="css-1492t68">Select a speaker...</div>

Я понял, что мой вопрос мог привести к некоторой путанице, поскольку сам элемент не имеетсемантический тег <input>, но скорее <div>.Я предполагаю, что это обрабатывается библиотекой quill-editor, которую наша команда разработчиков использовала при разработке этого приложения.

Вот скриншот всплывающего окна:

Screenshot of the pop-up

Ответы [ 2 ]

2 голосов
/ 05 апреля 2019

Поскольку элемент не имеет согласованного класса CSS, вероятно, лучшим вариантом будет использование выражения XPath.

Вам нужно подождать, пока элемент станет активным (что означает невнятный), сопоставив<div>, который содержит ожидаемый текст и имеет класс CSS, который начинается с css-.Это должно позволить JavaScript достаточно времени, чтобы выполнить свою функцию в браузере, чтобы инициализировать quill-редактор и отобразить его:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ExpectedConditions

xpath = "//div[starts-with(@class, 'css-')][contains(., 'The text you expect to find')]"
expected_condition = ExpectedConditions.element_to_be_clickable((By.XPATH, xpath))
element = WebDriverWait(driver, 20).until(expected_condition)

Если это всплывающее поле находится непосредственно внутри определенного родительского элемента, вы можете далеесоответственно ограничьте свое выражение xpath.

Если это удастся, ошибка не будет выдана.Если это не удается, он должен выбросить исключение WebDriverTimeoutException (или как эта ошибка вызывается в Python).

0 голосов
/ 05 апреля 2019

использование:

elem = driver.switch_to.active_element

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...