Проверьте, сфокусирован ли элемент, используя Selenium Webdriver

Я действительно удивлен, что не могу найти в Интернете ссылки на тестирование фокуса элемента с помощью Selenium Webdriver.

Я хочу проверить, когда при попытке отправки формы с пропущенным обязательным полем фокус перемещается на пустое поле. Но я не вижу способа сделать это с помощью API WebDriver.

Я смогу найти сфокусированный элемент, используя JavascriptExecutor. Но чтение FAQ заставляет меня думать, что должен быть какой-то способ выполнить проверку с помощью самого драйвера.

Спасибо за любую помощь.


person SamStephens    schedule 26.09.2011    source источник


Ответы (5)


driver.switchTo().activeElement() вернет текущий фокус WebElement. Равенство хорошо определено для WebElement, поэтому вы можете вызвать element.equals(driver.switchTo().activeElement()).

Вызов немного вводящего в заблуждение имени driver.switchTo().activeElement() на самом деле не переключает фокус, как и driver.findElement(), поэтому вам не нужно switchTo().defaultContent() после; на самом деле, это, вероятно, приведет к размытию текущего элемента.

person Daniel Wagner-Hall    schedule 17.08.2012
comment
У меня есть текстовое поле с id=widget_113_signup_username . Я хочу проверить, находится ли фокус на этом поле или нет. Я написал следующий код, чтобы сделать это. Если курсора на нем нет bb = false, иначе bb= true. Я прав? Мой код в порядке? логическое значение bb = driver.switchTo().activeElement().equals(driver.findElement(By.id(widget_113_signup_username))); - person Ripon Al Wasim; 30.08.2012

driver.switchTo().activeElement();

возвращает текущий сфокусированный элемент.

Убедитесь, что вы переключаетесь обратно после использования

driver.switchTo().defaultContent();

Также, если ничего не сфокусировано, возвращается body документа.

Взгляните и на этот вопрос.

Как в Selenium найти текущий объект

person Ranhiru Jude Cooray    schedule 26.09.2011
comment
Ответ от Дэниела говорит, что switchTo().defaultContent() неверен. - person Arjun; 28.04.2014

Вы можете найти активный элемент, используя селектор dom=document.activeElement. Затем вы можете утверждать, является ли это элементом, на котором вы хотите, чтобы он был сфокусирован или нет.

person Ashkan Aryan    schedule 26.09.2011

Предполагается, что WebDriver меняет фокус при использовании вызовов Driver.FindElement. Итак, у вас активен последний элемент в контексте драйвера.

ПРИМЕЧАНИЕ. Это прерывается для любых элементов, внедренных динамически (например, jQuery), поэтому вам нужно будет пройти маршрут сценария.

person Brett Veenstra    schedule 19.07.2012

@danielwagner-hall boolean bb = driver.switchTo().activeElement().equals(driver.findElement(By.id("widget_113_si‌​gnup_username"))); всегда будет проходить, но это не доказывает, что элемент находится в фокусе, если элемент находится вне поля зрения.

NB: Невозможно оставить комментарий из-за недостаточного количества очков репутации.

Один из способов приблизиться к этому может состоять в том, чтобы использовать методы webElement.getLocation().getX(); getY() и ссылаться на координаты на странице и проверять ее фокус.

person Django_Tester    schedule 05.03.2015