经典和xpath选择器之间的区别

时间:2015-03-11 16:16:38

标签: ruby xpath watir

下一句话有什么区别?

frame.span(:text=>'Patient')
frame.span(:xpath=>".//span[text() = 'Patient']")

第一句话效果很好,但在xpath中使用第二句话我无法在页面上找到元素。

1 个答案:

答案 0 :(得分:5)

摘要

区别在于空间的正常化。

如果设置$DEBUG=true,您会看到Watir将.span(:text=>'Patient')转换为XPath:

.//span[normalize-space()='Patient']

因此,当文本节点具有前导/尾随空格时,会有不同的结果。

<强>实施例

例如,在以下HTML中,没有前导/尾随空格:

<span>Patient</span>

结果,两种方法都返回相同的结果:

p browser.span(:text=>'Patient').exists?
#=> true
p browser.span(:xpath=>".//span[text() = 'Patient']").exists?
#=> true

但是,如果我们添加一些额外的空格:

<span>Patient </span>

我们看到:xpath定位器失败,因为它正在寻找文本节点正好&#34;患者&#34;不是&#34;患者&#34;。相反,:文本定位器将忽略前导/尾随空格。

p browser.span(:text=>'Patient').exists?
#=> true
p browser.span(:xpath=>".//span[text() = 'Patient']").exists?
#=> false