我的问题是关于使用dot和text()in的具体细节XPath.例如,以下find_element行返回相同的元素:
driver.get('http://stackoverflow.com/')
driver.find_element_by_xpath('//a[text()="Ask Question"]')
driver.find_element_by_xpath('//a[.="Ask Question"]')
Run Code Online (Sandbox Code Playgroud)
那么区别是什么呢?使用.和有text()什么好处和缺点?
我有一个节点如下:
<span class="portal-text-medium">Office Hours</span>
Run Code Online (Sandbox Code Playgroud)
对于我使用的XPath
//span[text()='Office Hours']
Run Code Online (Sandbox Code Playgroud)
这应该工作,但它永远不会.我可以使用*contains(text(),'Office Hours')]*但是找不到完全匹配,我必须验证没有"*".这不是它唯一不适合我的时间.我之前看到它有用,所以我不知道出了什么问题.任何的想法?
是的,我可以,并且确实使用,starts-with但它并不完全相同.
假设我有:
<A>
<B>C</B>
<D>E</D>
</A>
Run Code Online (Sandbox Code Playgroud)
然后我可以输出B元素(包括标签):
//B
Run Code Online (Sandbox Code Playgroud)
哪个会回归
<B>C</B>
Run Code Online (Sandbox Code Playgroud)
但是为什么谓词中不需要text()? 以下两行给出相同的输出:
/A[B = 'C']/D
/A[B/text() = 'C']/D
Run Code Online (Sandbox Code Playgroud)
如果XPATH是干净的构造我会期望它(或在某种其他元素结构):
/A[B = <B>C></B>]/D
Run Code Online (Sandbox Code Playgroud)
和:
/A[B/text()='C']/D
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个理由,为什么输出需要text(),但谓词不需要它?