Почему в 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)

Но вводятся только некоторые символы, а часть пропущена. Кто может сказать, почему некорректно форма заполняется?

1


Ответы (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, 'Иванов')
→ Ссылка
Автор решения: Дмитрий С

Без циклов и прочего: input_form.send_keys('Иванов').perform()

→ Ссылка