Selenium Python – Handling No such element exception
Question:
I am writing automation test in Selenium using Python. One element may or may not be present. I am trying to handle it with below code, it works when element is present. But script fails when element is not present, I want to continue to next statement if element is not present.
try:
elem = driver.find_element_by_xpath(".//*[@id='SORM_TB_ACTION0']")
elem.click()
except nosuchelementexception:
pass
Error –
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element:{"method":"xpath","selector":".//*[@id='SORM_TB_ACTION0']"}
Answers:
Are you not importing the exception?
from selenium.common.exceptions import NoSuchElementException
try:
elem = driver.find_element_by_xpath(".//*[@id='SORM_TB_ACTION0']")
elem.click()
except NoSuchElementException: #spelling error making this code not work as expected
pass
Why not simplify and use logic like this? No exceptions needed.
if elem.is_displayed():
elem.click()
You can see if the element exists and then click it if it does. No need for exceptions. Note the plural “s” in .find_elements_*
.
elem = driver.find_elements_by_xpath(".//*[@id='SORM_TB_ACTION0']")
if len(elem) > 0
elem[0].click()
the way you are doing it is fine.. you are just trying to catch the wrong exception. It is named NoSuchElementException
not nosuchelementexception
Handling Selenium NoSuchExpressionException
from selenium.common.exceptions import NoSuchElementException
try:
elem = driver.find_element_by_xpath
candidate_Name = j.find_element_by_xpath('.//span[@aria-hidden="true"]').text
except NoSuchElementException:
try:
candidate_Name = j.find_element_by_xpath('.//a[@class="app-aware link"]').text
except NoSuchElementException:
candidate_Name = "NAN"
pass
I am writing automation test in Selenium using Python. One element may or may not be present. I am trying to handle it with below code, it works when element is present. But script fails when element is not present, I want to continue to next statement if element is not present.
try:
elem = driver.find_element_by_xpath(".//*[@id='SORM_TB_ACTION0']")
elem.click()
except nosuchelementexception:
pass
Error –
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element:{"method":"xpath","selector":".//*[@id='SORM_TB_ACTION0']"}
Are you not importing the exception?
from selenium.common.exceptions import NoSuchElementException
try:
elem = driver.find_element_by_xpath(".//*[@id='SORM_TB_ACTION0']")
elem.click()
except NoSuchElementException: #spelling error making this code not work as expected
pass
Why not simplify and use logic like this? No exceptions needed.
if elem.is_displayed():
elem.click()
You can see if the element exists and then click it if it does. No need for exceptions. Note the plural “s” in .find_elements_*
.
elem = driver.find_elements_by_xpath(".//*[@id='SORM_TB_ACTION0']")
if len(elem) > 0
elem[0].click()
the way you are doing it is fine.. you are just trying to catch the wrong exception. It is named NoSuchElementException
not nosuchelementexception
Handling Selenium NoSuchExpressionException
from selenium.common.exceptions import NoSuchElementException
try:
elem = driver.find_element_by_xpath
candidate_Name = j.find_element_by_xpath('.//span[@aria-hidden="true"]').text
except NoSuchElementException:
try:
candidate_Name = j.find_element_by_xpath('.//a[@class="app-aware link"]').text
except NoSuchElementException:
candidate_Name = "NAN"
pass