команда selenium clear () не очищает элемент - PullRequest
0 голосов
/ 04 июня 2018

Я некоторое время писал сценарии селена на Java.Сегодня я столкнулся с очень странной проблемой.

Вот проблема: я очистил текстовое поле с помощью метода webelement.clear (), позже, выполняя следующую команду (событие щелчка), текстовую область, которую я ранее очистил,теперь заполнено ранее заполненным значением.

Вот фрагмент кода:

mobileNumField.get(0).clear();
Thread.sleep(4500);
emailAddress.get(0).click();
emailAddress.get(0).clear();
Thread.sleep(4500);
emailAddress.get(0).sendKeys(Keys.TAB);

Ответы [ 4 ]

0 голосов
/ 27 марта 2019

У меня была похожая проблема с текстовым полем, в котором использовался плагин автозаполнения.Мне пришлось явно очистить значение атрибута, а также сделать SendKeys.Я создал метод расширения для инкапсуляции поведения, надеюсь, приведенный ниже фрагмент поможет:

public static void SendKeysAutocomplete(this IWebElement element, string fieldValue)
{
   element.SendKeys(fieldValue);
   element.SetAttribute("value", fieldValue);
}

public static void SetAttribute(this IWebElement element, string attributeName, string attributeValue)
{
   var driver = WebDriverHelper.GetDriverFromScenarioContext();

   var executor = (IJavaScriptExecutor)driver;
   executor.ExecuteScript("arguments[0].setAttribute(arguments[1], arguments[2]);", element, attributeName, attributeValue);
}
0 голосов
/ 05 июня 2018

Возможно, что поля, которые вы пытаетесь заполнить, имеют атрибут autocomplete, установленный на. [Ссылка]

Если при выполнении строки работает clear(), можно с уверенностью сказать, что это не проблема, специфичная для веб-драйвера.

Это поможет, если вы сможетепокажите HTML-фрагмент раздела страницы, над которым вы работаете.

Возможные области отладки:

принудительное удаление атрибута автозаполнения при загрузке страницы с помощью исполнителя сценариев Java отключение параметра автозаполнения на уровне драйвера,Я полагаю, что решение будет варьироваться в зависимости от используемого драйвера.

Удачи!

PS: Эти Thread.sleep (s) не рекомендуется.

0 голосов
/ 27 июня 2018

Еще один способ, который работал для меня в Python, но это не то, что вы бы назвали элегантным:

for _ in range(4):
    risk_percentage.send_keys(Keys.BACK_SPACE)
0 голосов
/ 04 июня 2018

Я не знаю точную причину, по которой ваш элемент сохраняет свое значение, но вы можете попробовать альтернативную очистку текста, отправив комбинацию клавиш «Ctrl + A + Delete», используя метод sendKeys объекта элемента:

emailAddress.sendKeys(Keys.chord(Keys.CONTROL,"a", Keys.DELETE));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...