Почему в selenium send_keys пропускает символы при вводе строки в input?
В Selenium ввожу строку в input с помощью send_keys:
input_form = self.driver.find_element_by_id('fam')
input_form.send_keys('Иванов')
time.sleep(3)
input_form = self.driver.find_element_by_id('nam')
input_form.send_keys('Иван')
time.sleep(3)
input_form = self.driver.find_element_by_id('otch')
input_form.send_keys('Иванович')
time.sleep(3)
Но вводятся только некоторые символы, а часть пропущена. Кто может сказать, почему некорректно форма заполняется?
Ответы (2 шт):
Автор решения: Roman Konoval
→ Ссылка
Такая проблема возникает, в частности, в случае, если на input-е есть javascript обработчик, который перед тем как значение попадет собственно в input делает что-то дополнительное. Например, проверяет формат введенных данных или допустимость символов.
Selenium посылает символы без задержки и некоторые пропускаются.
Избежать этой проблемы можно посылая символы по одному и ожидая, что предыдущий уже точно обработан. Для этого можно использовать функцию типа такой:
from selenium.webdriver.support.ui import WebDriverWait
def send_keys_with_delays(element, value):
wait = WebDriverWait(driver, 10)
for i in range(len(value)):
element.send_keys(value[i])
wait.until(lambda _: element.get_property('value')[:i] == value[:i])
Теперь вместо:
input_form.send_keys('Иванов')
используем:
send_keys_with_delays(input_form, 'Иванов')
