Python with selenium: unable to locate element which really exist
Question:
I’ve been trying fill input:
<input id="PASSFIELD1" class="logField" type="password" onkeyup="next(this, event);" maxlength="1" autocomplete="off" name="PASSFIELD1"></input>
To do this, I have to find this element.
I tried below things:
-
pass1=driver.find_element_by_name("PASSFIELD1")
-
pass1=driver.find_element_by_id("PASSFIELD1")
-
pass1= driver.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]")
(path from firebug)
-
Even wait 100 seconds for it
self.wait.until(EC.visibility_of_element_located((By.XPATH,"/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]")))
self.assertTrue(self.driver.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]"))
I always get:
selenium.common.exceptions.NoSuchElementException: Message: ‘Unable to locate element: (…)
Do you know what I am doing wrong?
Answers:
The problem is that your input
tag is inside an iframe
, you need to switch to it first:
frame = driver.find_element_by_xpath('//frame[@name="main"]')
driver.switch_to.frame(frame)
pass1 = driver.find_element_by_id("PASSFIELD1")
Add some delay to the driver so that elements will load.
import time
time.sleep(2)
department_element = driver.find_elements_by_id("__id_name__")
or else you can use the following code so that loop runs until the element render
while len(driver.find_elements_by_id("__id_name__")) == 0:
pass
department_element = driver.find_elements_by_id("__id_name__")
I’ve been trying fill input:
<input id="PASSFIELD1" class="logField" type="password" onkeyup="next(this, event);" maxlength="1" autocomplete="off" name="PASSFIELD1"></input>
To do this, I have to find this element.
I tried below things:
-
pass1=driver.find_element_by_name("PASSFIELD1")
-
pass1=driver.find_element_by_id("PASSFIELD1")
-
pass1= driver.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]")
(path from firebug) -
Even wait 100 seconds for it
self.wait.until(EC.visibility_of_element_located((By.XPATH,"/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]")))
self.assertTrue(self.driver.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]"))
I always get:
selenium.common.exceptions.NoSuchElementException: Message: ‘Unable to locate element: (…)
Do you know what I am doing wrong?
The problem is that your input
tag is inside an iframe
, you need to switch to it first:
frame = driver.find_element_by_xpath('//frame[@name="main"]')
driver.switch_to.frame(frame)
pass1 = driver.find_element_by_id("PASSFIELD1")
Add some delay to the driver so that elements will load.
import time
time.sleep(2)
department_element = driver.find_elements_by_id("__id_name__")
or else you can use the following code so that loop runs until the element render
while len(driver.find_elements_by_id("__id_name__")) == 0:
pass
department_element = driver.find_elements_by_id("__id_name__")