Ruby Selenium ActionBuilder метод send_keys, дублирующий строки, которые я отправляю

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

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 ответа

Решение

При использовании действий 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) }

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

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

https://selenium-python.readthedocs.io/navigating.html

Другие вопросы по тегам