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
Asked
Active
Viewed 2.7k times
3 Answers
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