下一句话有什么区别?
frame.span(:text=>'Patient')
frame.span(:xpath=>".//span[text() = 'Patient']")
第一句话效果很好,但在xpath中使用第二句话我无法在页面上找到元素。
答案 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