Issue
I am trying to make a python program using selenium that opens the browser and does some stuff, waits for the user to click on a button, then selenium takes over again. I know that I am supposed to use an explicit wait but I do not know how to make selenium wait for the user to click a button on the browser before continuing with my code.
Here is a summary of my code so far:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
driver_path = my_driver_path
driver = webdriver.Chrome(executable_path=driver_path, chrome_options=options)
driver.get(my url)
... (Some code that does automation stuff until a certain point)
#What do I do here?
wait = WebDriverWait(driver, 10)
...(After the user clicks I want the program to resume)
Solution
Presumably, something on the website changes when the user clicks on the button. Define that change as the wait condition.
For example, if you expect an element to pop up:
def is_visible(by, identifier):
def condition(driver):
elems = driver.find_elements(by, identifier)
ele = elems and elems[0]
exists_and_displayed = ele and ele.is_displayed()
return exists_and_displayed
return condition
wait.until(is_visible(By.ID, 'added_or_unhidden_after_click'))
Or if you expect something to disappear:
def is_not(condition):
@ft.wraps(condition)
def wrapper(driver):
return not condition(driver)
return wrapper
wait.until(is_not(is_visible(By.ID, 'removed_or_hidden_after_click')))
(typed from memory, might have a syntax error or so, but you should get the idea)
(The built-in expected_conditions as EC
basically do these same things, but I run into small issues with them here and there the way they're written, so I prefer to roll my own.)
Answered By - Kache
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.