XPath:查找包含文本X而不是Y的元素

时间:2016-06-26 14:14:03

标签: python selenium xpath

我正在尝试在Selenium中使用XPath为Python找到一个Web元素。 web元素应包含“Chocolate”文本,但不包括“Dark”

我尝试过这种语法,但没有让它起作用(请注意parantheses):

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

以下是使用换行符和串联以获得可读性的相同代码:

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

2 个答案:

答案 0 :(得分:4)

请尝试关注XPath并告知我是否发生错误:

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

答案 1 :(得分:1)

这是使用一组方括号的语法。

对于包含单词' Chocolate'但不是' Dark',使用:

io.sockets.connected[socketid].emit();

仅对于元素的文本,请使用:

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

给出以下XML:

//text()[contains(., 'Chocolate') and not(contains(., 'Dark'))]

第一个表达式导致:

<doc>
  <e>Dark Chocolate</e>
  <e>Chocolate</e>
</doc>

第二个表达式导致:

> xpath -e "//*[contains(text(), 'Chocolate') and not(contains(text(), 'Dark'))]" test.xml 
<e>Chocolate</e>