0 votes
1 view
in DevOps and Agile by (28.4k points)

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.

1 Answer

0 votes
by (28.4k points)

You can try either elt.NoSuchElementException or driver.NoSuchElementException as it is probably defined in the scope of one of them. 

You can also use from selenium import NoSuchElementException to bring it into scope.

or, you can also try using this

from selenium.common.exceptions import NoSuchElementException

Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...