joa*_*erg 18 selenium xpath selenium-webdriver
我正在尝试使用xPath来查找包含一段文本的元素,但我无法让它工作....
WebElement searchItemByText = driver.findElement(By.xpath("//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text()='Some text')]"));
Run Code Online (Sandbox Code Playgroud)
如果我用"包含"的东西删除最后一位,它会找到我的span元素,但我需要根据文本内容选择它.它也不会是'Some text'的完美匹配,因为它也可能包含截断的字符串.
有谁看到这个问题?
dnl*_*crl 43
我认为问题在于:
[contains(text()='Some text')]
Run Code Online (Sandbox Code Playgroud)
打破这个,
[]
是一个条件,对该节点集中的每个单独节点进行操作 - 在您的情况下为每个跨节点.如果它操作的任何单个节点与括号内的条件匹配,则匹配.text()
是一个选择器,它匹配作为上下文节点的子节点的所有文本节点 - 它返回一个节点集. contains
是一个对字符串进行操作的函数.如果传递了节点集,则通过返回节点集中节点的字符串值将节点集转换为字符串,该节点集是文档顺序中的第一个节点集.您应该尝试将其更改为
[text()[contains(.,'Some text')]]
外部[]
是在每个单独节点上操作的条件,在该节点集中text()
是一个选择器,它匹配作为上下文节点的子节点的所有文本节点 - 它返回一个节点集.
内部[]
是对该节点集中的每个节点进行操作的条件.
contains
是一个对字符串进行操作的函数.这里传递一个单独的文本节点(.
).
Uma*_*iri 13
用这个
//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(text(),'Some text')]
Run Code Online (Sandbox Code Playgroud)
要么
//*[@id='popover-search']/div/div/ul/li[1]/a/span[contains(.,'Some text')]
Run Code Online (Sandbox Code Playgroud)