t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenide - Не работает функция clear у поля Input

gradle
java
selenium
selenide
webdriver
Теги: #<Tag:0x00007fb2f7dd3838> #<Tag:0x00007fb2f7dd36d0> #<Tag:0x00007fb2f7dd3540> #<Tag:0x00007fb2f7dd3360> #<Tag:0x00007fb2f7dd31f8>

(Pavel) #1

Первый раз сталкиваюсь с такой проблемой в selenide. Не работает функция clear() в поле Input

public void sendInputForm(String field, String value){
  $(By.xpath("//div[@class='modal-item__title']/h4[contains(text(),'" + field + "')]" +
                "//ancestor::li[@class='layout modal-item']//input")).clear();
  $(By.xpath("//div[@class='modal-item__title']/h4[contains(text(),'" + field + "')]" +
                "//ancestor::li[@class='layout modal-item']//input")).sendKeys(value);
}

У кого была такая же проблема и как её обходили?


(Viktor) #2

попробуй кликнуть по полю перед очисткой, либо через джаваскрипт установи значение


(Vladyslav Lopatynskyi) #3

Есть еще не очень очевидный вариант но он зависит от того как это поле было сделано.

Не уверен, не знаю да и не спрашивал, глобальная ли это проблема, но у меня было так:

clear() судя по W3C спеке по дефолту после очистки всегда вызывает blur().
У меня девы повесили на onBlur() ивент переопределение значения поля, однако если поле пустое, то значение откатывалось до предыдущего. то-есть clear() отрабатывал, но потом значение возвращалось.

Решение: обойти clear. Присвоить value элементу через JS обычно не хватает. После очистки\присвоения нового значение, надо будет вручную тригернуть onChange и onBlur()


(Pavel) #4

Спасибо всем за помощь, но нашёл более простое решение.

$(By.xpath("//div[@class='modal-item__title']/h4[contains(text(),'" + field + "')]" +
                "//ancestor::li[@class='layout modal-item']//input")).sendKeys(Keys.CONTROL + "a");
$(By.xpath("//div[@class='modal-item__title']/h4[contains(text(),'" + field + "')]" +
                "//ancestor::li[@class='layout modal-item']//input")).sendKeys(Keys.BACK_SPACE);

Selenide + RemoteWebDriver + Change Default Timeout
(Dmytro Kryshtopenko) #5

Три вида осуществления чистки input полей средствами Selenium Web Driver (добавьте себе в заметку, чтоли :grinning:)

searchField.clear();

или

searchField.sendKeys(Keys.CONTROL + "A");
searchField.sendKeys(Keys.BACK_SPACE);

или

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].value = '';", searchField);
searchField.sendKeys(username);

p.s. ссылка на стак


(Pavel) #6

У меня первый вариант не работал. Но спасибо за заметку