I\'ve been having trouble figuring out how to get a variable to work Selenium. This post seems to have helped (Variable not working inside parenthesis) but I still can\'t ge
To click()
on the element with respect to the variable value attribute of the <option>
tag using Selenium and python you can use either of the following Locator Strategies:
Using variable in XPATH
:
state = 'AL-Alabama'
driver.find_element_by_xpath("//option[@value='" +state+ "']").click()
Using %s
in XPATH
:
state = 'AL-Alabama'
driver.find_element_by_xpath("//option[@value='%s']"% str(state)).click()
Using format()
in XPATH
:
state = 'AL-Alabama'
driver.find_element_by_xpath("//option[@value='{}']".format(str(state))).click()
Ideally. to click()
on the element with respect to the variable value attribute of the <option>
tag using Selenium] and you need to to induce WebDriverWait for the element_to_be_clickable()
and you can use either of the following Locator Strategies:
Using variable in XPATH
:
state = 'AL-Alabama'
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='" +state+ "']"))).click()
Using %s
in XPATH
:
state = 'AL-Alabama'
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='%s']"% str(state)))).click()
Using format()
in XPATH
:
state = 'AL-Alabama'
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//option[@value='{}']".format(str(state))))).click()
Note : You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
You can find a couple of relevant discussions in:
If you still want to use single quotes then you can also try this answer. Check if it helps:
driver.find_element_by_xpath('//option[@value=\'{State_Name}\']'.format(State_Name=State)).click()
or simply
driver.find_element_by_xpath('//option[@value=\'{}\']'.format(State)).click()
You can pass "State" as parameter in your function.
The single quotes around the value are not present with how you coded it. Try:
driver.find_element_by_xpath("//option[@value='" + state + "']").click()