Ruby Selenium ActionBuilder метод send_keys, дублирующий строки, которые я отправляю - PullRequest
0 голосов
/ 07 декабря 2018

Итак, допустим, у меня есть массив с именем list, который содержит строки, указанные ниже, когда я циклически перебираю массив для отправки каждого элемента из массива на элемент текстового редактора онлайн, который уже имеет фокус:

list = ["First", "Second", "Third"]

for index in 0 ... list.size
      line = list[index]
      chain.send_keys(line).perform
      if index < list.size 
        page.driver.browser.action.send_keys(:return).perform
      end
end

Проблема, с которой я сталкиваюсь, заключается в том, что вместо вывода, чтобы выглядеть так:

First

Second

Third

это выглядит так:

First

First Second

First Second Third

Почему это происходит?потому что предыдущие действия все еще находятся в очереди действий и не очищены?или какая-то другая причина?Буду признателен, если кто-нибудь может помочь.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

При использовании действий api он формирует список действий, которые затем выполняются путем вызова perform.Однако, вызов perform не сбрасывает этот список, поэтому, если вы снова наберете perform, он повторяет те же действия.При том, как вы его называете

chain.send_keys(line).perform

добавляет действие send_keys в цепочку, а затем выполняет его.В следующий раз он добавляет еще одно действие send_keys в цепочку, а затем выполняет оба действия.Решением для этого было бы просто создать новую цепочку действий каждый раз вместо того, чтобы повторно использовать chain или вызывать chain.clear_actions для очистки цепочки действий каждый раз в цикле.Вы вообще используете API действий, а не просто вызываете send_keys для элемента, которому вы хотите отправить ключи тоже

el = find(...)  # find the element on the page you want to send the keys to
list.each do { |str| el.send_keys(str, :return) }
0 голосов
/ 07 декабря 2018

Селекция Selena работает следующим образом: команды sendkeys отправляют строковое значение текстовому элементу. Он не будет проверять, присутствует ли в нем текст или нет.Если вы хотите, чтобы ключи устанавливались заново каждый раз, пожалуйста, используйте команду chain.clear() перед chain.send_keys(line).perform в цикле.Это гарантирует, что текст в элементе будет очищаться каждый раз перед отправкой.

Дайте мне знать, если это вам не поможет.

https://selenium -python.readthedocs.-й / navigating.html # взаимодействующей-с-страницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...