我想用Selenium IDE打开这个网页并检查是否有一些文本包含在特定的地方
目前我只能匹配entire文本
First-Play Zoft Touch Dodgeball, Red
为此我使用
Command | Target | Value
`assert text` `xpath=//div[@id='vvp-items-grid']/div/div/div/a/span/span[2]` `First-Play Zoft Touch Dodgeball, Red`
现在,因为Selenium IDE暂时不支持通配符,我不得不使用伤脑筋的方法
我的目标是看看“dodgeball”这个词是否存在。我到底如何将
contains
和 dodgeball
与那个 xpath 定位器结合使用?
真正让我感到困惑的是,在给定的
示例中有一个
.,
?为什么在那里?是“逃避”?因为它对我来说非常混乱和不可读。
XPath 中的
.
字符是对context 节点 的引用。将其视为“当前”节点,它提供了计算 XPath 表达式的上下文。您可以将其视为类似于某些面向对象语言中的 this
关键字。
[
和 ]
字符在 XPath 中用于定义一个 predicate,它是一个过滤器,应用于一组节点,返回匹配布尔表达式的子集。 [
和 ]
的内容是一个布尔表达式,XPath 处理器逐个获取节点集中的每个节点,并以该节点作为上下文节点对表达式求值。所以谓词中的.
是对过滤器当前决定的节点的引用。
例如如果
$x
是一个节点集,那么 $x[true()]
是同一个集合,因为无论上下文节点如何,表达式 true()
始终为真。表达式 $x[contains(., 'dodgeball')]
将返回集合 $x
中的节点子集,其字符串值包含字符串 dodgeball
.
您可以像这样将
assertElementPresent
与 XPath 一起使用:
//div[@id='vvp-items-grid']/div/div/div/a/span/span[2][contains(., 'Dodgeball')]
在这里,XPath 表达式的第一部分 (
//div[@id='vvp-items-grid']/div/div/div/a/span/span[2]
) 将返回一组 span
元素,它后面的谓词 ([contains(., 'Dodgeball')]
) 将对该集合中的每个元素进行一次评估,用 .
引用每个有问题的元素,并生成一个新的节点集,该节点集仅包含确实包含 Dodgeball
文本的元素。
注意
contains
函数区分大小写;如果你想找到Dodgeball
你需要使用字符串Dodgeball
,而不是dodgeball
.