18

I am currently creating a selenium script in python. I need to enter something in a text box using send_keys function. It is doing that correctly as of now. However, for an observation for I need to slow down the speed at which send_keys populates the text field. Is there a way I can do that? Also, is there any alternate to send_keys in selenium? Thanks&Regards karan

karan juneja
  • 387
  • 2
  • 4
  • 10

3 Answers3

29

You could insert a pause after each character is sent. For example, if your code looked like this:

el = driver.find_element_by_id("element-id")
el.send_keys("text to enter")

You could replace it with:

el = driver.find_element_by_id("element-id")
text = "text to enter"
for character in text:
    el.send_keys(character)
    time.sleep(0.3) # pause for 0.3 seconds
Mark Lapierre
  • 1,067
  • 9
  • 15
10

Iterating over Mark's answer, you can wrap it up in a reusable function:

import time


def slow_type(element, text, delay=0.1):
    """Send a text to an element one character at a time with a delay."""
    for character in text:
        element.send_keys(character)
        time.sleep(delay)

Version with type hints:

import time

from selenium.webdriver.remote.webelement import WebElement


def slow_type(element: WebElement, text: str, delay: float=0.1):
    """Send a text to an element one character at a time with a delay."""
    for character in text:
        element.send_keys(character)
        time.sleep(delay)

Usage:

el = driver.find_element_by_id("element-id")
text = "text to enter"
slow_type(el, text)
alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195
0

Removing the space and slowing things down fixed the issue

def type_and_fill_slow(form_id,message):
    form_id.clear()
    for character in message:
        type(form_id)
        time.sleep(2)
        form_id.send_keys(character)    
JustAsking
  • 121
  • 7