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

Первый раз сталкиваюсь с такой проблемой в 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);
}

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

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

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

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

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

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

1 лайк

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

$(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);
1 лайк

Три вида осуществления чистки 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. ссылка на стак

1 лайк

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