Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не могу ввести значение в поле средствами WebDriver


(Raynor) #1

Разработчики наворотили кучу JS обработчиков ввода в поле.

Похоже в связи с этим я не могу ввести значение в него. Ручками все нормально вносится.

Делаю все как обычно:  

driver.findElement(By.xpath(phoneLocator)).sendKeys("1234567890");

Пробовал вставить из буфера - результат тот же - ничего не вставляется

 

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

 


Какие ограничения WebDriver можно лечить через JavaScript?
(Mykhailo Poliarush) #2

ну тогда надо понимать, что из javascript запускается при вводе текста в поле

а после вызвать такую же функцию через executeScript


(Alexander Petrovich) #3

Ещё есть вероятность, что у вас не успевают сбилдится скрипты перед непосредственно вводом. Сам буквально сегодня столкнулся.


(vmaximv) #4

1. Не в то поле тайпаете.

2. Траблы с драйвером (было у ChromeDriver+iframe+textarea например).

3. Пробовать делать click перед sendKeys

4. Проблемы синхронизации. Влепить слип секунд на 10 перед sendKeys для подтверждения/опровержения.


(Hohner) #5

У меня как-то была похожая ситуация. Имелось несколько полей и ввести текст в них не получалось. Оказалось, что поле имело один id, а после клика по нему появлялся что-то вроде editor, который в свою очередь имел свой id. Плюс ко всему этому приложение было на ExtJs, то есть id генерировались динамически и к полям можно было подобраться только по xpath. Поэтому пришлось сделать свои методы для работы с такими полями. В теле метода работает примерно следующая последовательность действий:

1. клик по полю,

2. ожидать появления editor

3. печатаь в editor


(Raynor) #6

@vmaximv

1. Тайпаю в то поле

2. Траблов с дравером нет (соседние поля тайпаются идеально)

3,4  Разумеется все это пробовал. И даже из буфера пытался вставить

 

@Hohner

Локатор верный это точно )) Никаких заморочек с этим нет

 

Вопрос решил сам, а точнее с подсказки нашего программера.

Решил с помощью вставки значения посредством JS

Если кому интересно код примерно такой:

jsEngine.executeScript("$('#phone').val('" + str + "');");

jsEngine объявлял примерно так:

if (driver instanceof JavascriptExecutor) {
jsEngine = (JavascriptExecutor)driver;
}
 
 
Спасибо за отклики. Не очень верил в помощь на форуме. На удивление достаточно активно все отреагировали. Обязательно буду здесь жить ))
Еще раз спасибо!

(Taras) #7

у меня тоже когда то била такая проблема - помог имлицитний вейтер перед ренедером страници с етим елементом куда вводить текст


(Raynor) #8

Не понял как ожидание могло повлиять на решение проблемы


(vmaximv) #9

Проблему вы не решили, а обошли. Вот несколько неблагоприятных сценариев.

1. Элемент невидим - тесты passed

2. Элемент disabled - тесты passed

3. Элемент отсутствует - невнятный эксепшен JavaScriptError, например в IE - и вовсе без поясняющей информации

4. Не отработают эвенты навешанные на элемент. Я не сильно знаком с jquery, но мне кажется onclick вряд ли отработает при $().val()

Т.е. вы можете получить абсолютно противоположенную ситуацию - скрипты будут вводить текст, а вот руками не выйдет.

Я не говорю, что нельзя использовать js, но это должно быть последним решением.

Судя по вашим ответам, скорее всего, проблема все же в драйвере. И вы не указали версию браузера/селениума/драйвера(если таковой используется) и его конфигурации.

Еще варианты:

1. Использовать AdvancedUserInteractions, класс Actions  в частности, в различных вариациях:

.click(el).sendKeys("").perform(); 

.moveToElement(el).click().sendKeys("").perform();

.sendKeys(el,"").perform()

2. Попробывать запустить в другом браузере

3. Попробовать другие версии селениума/драйвера/браузера

Естественно, все это имеет смысл делать при наличии времени и интереса.


(Taras) #10

ето хороший вопрос на которий ответа у меня нет, но работает )


(Raynor) #11

Actions был опробован практически сразу, все попытки ни к чему не привели.

Элемент на видимость и disabled вполне себе проверяется обычными средствами

Элемент отсутствует - fail

Все обработчики навешанные на это поле отрабатывают нормально, в моих тестах это и проверяется.

У меня была была конкретная проблема ввести текст, после многочисленных проб и ошибок это получилось только js

 

Теоретически есть риск, про который вы говорите: может быть ситуация когда руками текст не вводится. Такую возможность осознаю, но оцениваю вероятность сего как очень низкую.

И по сему готов примириться с этим