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.
Дайте мне знать, если это вам не поможет.