Sometimes on a page I'll be looking for an element which may or may not be there. I wanted to try/catch this case with a NoSuchElementException
, which selenium was throwing when certain HTML elements didn't exist. Original exception:
NoSuchElementException: Message: u'Unable to locate element: {"method":"css selector","selector":"#one"}' ; Stacktrace: at FirefoxDriver.prototype.findElementInternal_ (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/components/driver_component.js:8899) at FirefoxDriver.prototype.findChildElement (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/components/driver_component.js:8911) at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/components/command_processor.js:10840) at DelayedCommand.prototype.executeInternal_ (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/components/command_processor.js:10845) at DelayedCommand.prototype.execute/< (file:///var/folders/6q/7xcjtgyj32nfc2yp_y5tr9pm0000gn/T/tmp63Mz2a/extensions/[email protected]/components/command_processor.js:10787)
Ironically, it won't let me catch this exception which it was throwing before? Code here:
elt = driver.find_element_by_css_selector('.information') try: dat1 = elt.find_element_by_css_selector('#one').text dat2 = elt.find_elements_by_css_selector('#two')[1].text text = dat1 + dat2 except NoSuchElementException: text = elt.find_element_by_css_selector('#all').text item.set_description(text)
Error here:
NameError: name 'NoSuchElementException' is not defined
Googling/documentation came up with nothing...and it strikes me as strange that selenium is fine throwing an exception but can't catch it.
When we try to run the code below, it raises NoSuchElementException . This is because we try to find an element called userNam , but the webpage element name in the source code is userName . 20. 1. from selenium import webdriver.
NoSuchElementException is one of the different WebDriver Exceptions and this Exception occurs, when the locators (i.e. id / xpath/ css selectors etc) we mentioned in the Selenium Program code is unable to find the web element on the web page.
You need to import the exception first
from selenium.common.exceptions import NoSuchElementException
and then you can reference it
except NoSuchElementException: # handle the element not existing
If you would like to give details of the exception in your output then you can use:
except NoSuchElementException as exc: print(exc) # and/or other actions to recover
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With