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

WebDriver clean не очищает текстовое поле


(Shaman) #1

Столкнулся с проблемой. метод clean(), который перед вводом текста очищает поле не работает. тоесть поле просто не очищается.

думал обновить до последнего селениум сервер, но в нем проблема, он каждое действие пишет в консоль.


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

то что пишется все в консоль это не проблема, а логер :)


(Shaman) #3

а есть возможность его как нибудь выключить? она мои личные логи закрывает.


(aspirin) #4

побробуйте очищать поле просто присвоив ""


(Shaman) #5

решил вопрос просто отправляя символ нажатия клавиши backspace несколько раз. если кому интересно то выглядело следующим образом:

driver.findElement(By.id("myid")).sendKeys("\b\b\b\b\b\b");


(Mykhailo Poliarush) #6

мда, это решение конечно лучше чем ничего. 

а если символов будет больше чем 6?


(Shaman) #7

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


(Taras) #8

если симоволов больше чем 6 тогда берем перед очисткой gettext с поля - считаем количество символов в тексте, и в цикле запускаем нажатие кнопки \b столько раз сколько у нас символов в поле, но лучше ето все засандалить в функцию типа input_field_reset, ну конечно если Вы пишете по типу Page Object Pattern и вызывать ее уже для всех тестов. Но не думаю что решение ето оптимальное так как не во всех полях есть возможность нажатия backspace, конечно редко но встречаються, по етому если вернуться к функции то нужно привести ее к универсальному виду)


(Mykhailo Poliarush) #9

понял, так бывает иногда :)


(Mykhailo Poliarush) #10

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


(Alexander Petrovich) #11

Может я что-то упустил, но метод, вроде как cleaR()

driver.find_element_by_id("id").clear()


(lily) #12

не помогает он. не очищается textarea ((

у меня по умолчанию стоит единица в поле ввода. и при прохождении теста,  в поле дописывается цифра, что совершенно не удовлетворяет.

может кто нашел другое решение?

имитация backspace не подходит


(Shaman) #13

возможно у вас отрабатывает на страницу скрипт который подставляет дефолтное значение.

 

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

 

если действительно скрипт то можно написать антискрипт и через javascriptExecutor им блокировать работу автозаполнения.


(user12) #14

clear не всегда очищает инпут-поле

http://software-testing.ru/forum/index.php?/topic/22822/

 

см. мой коммент в топике


(Alexander Petrovich) #15

Давайте уже страницу живую что ли посмотреть. Придумаем чё-нить


(lily) #16

действительно  отрабатывает скрипт...удалось backspace победить проблемы. однако есть поле, где количество символов каждый раз разное и угадывать /b не очень хорошо.

постараюсь выложить страницу.. пока с backspace работаю...)) найду вариант решения - обязательно отпишу


(Alexander Petrovich) #17

В принципе можно конечно находить элемент, определять длину и лепить нужное кол-впо пробелов. Но опять же, глупо. Давайте страницу :)


(lily) #18

Вот так записан код поля ввода 1 и 2 :

<div class="row">

<div class="m-col-1">
<div class="m-col-2">
<label for="order-pages">Pages</label>
    <div class="f-text">
       <div class="tr">
          <div class="bl">
               <div class="br">
                     <input id="order-pages" class="text" type="text" maxlength="3" value="1" name="pages">
               </div>
            </div>
        </div>
      </div>
   </div>
</div>
<div class="row">
     <div class="m-col-1 upload">
       <div class="m-col-2">
          <label for="order-link">or Link</label>
            <div class="f-text">
              <div class="tr">
                <div class="bl">
                  <div class="br">
                     <input id="order-link" class="text" type="text" value="http://" name="link">
                  </div>
                </div>
            </div>
       </div>
     </div>
</div>

может я что не так делаю....


(Alex.The.Test) #19

Попробуйте очищать и заполнять textfield таким образом:

Осторожно C# :)!

IWebElement textfield = driver.FindElement("By.smth");

textfield.Clear();

textfield.Click();

textfield.SendKeys("sometext");

Для работы с полем в котором есть автозаполнение мне помогают такие манипуляции.


(lily) #20

спасибо) помог и вариант от Alex.The.Test и вариант с backspace.. немного пошаманили с разработчиками, переписали кусочек кода  и теперь проблема ушла:)