Winterflags Winterflags - 5 months ago 24
Python Question

XPath: Find element that contains text X and not Y

I'm attempting to find a web element using XPath in

Selenium
for Python. The web element should contain the text "Chocolate" but not include "Dark".

I've tried this syntax but not gotten it to work (be mindful of parantheses):

choco = driver.find_element_by_xpath("//*[text()[contains(., 'Chocolate')] and not[[contains(., 'Dark')]]]")


Here is the same code using line breaks and concatenation for readability:

choco = driver.find_element_by_xpath((
"//*[text()[contains(., 'Chocolate')]" +
"and not[[contains(., 'Dark')]]]"
))

Answer

Please try following XPath and let me know if any errors occurs:

//*[contains(text(), "Chocolate")][not(contains(text(), "Dark"))]