XPath查询搜索

时间:2015-02-05 13:03:55

标签: selenium xpath selenium-webdriver

给出了这样的结构

<div class="user-number">123</div>
<div class="user-state">
<span class="u-state-icon icon icon-1"></span>
<span> User1</span>
</div>

我已尝试通过User1查找user-number这样的(不正确的)xpath,并且不明白问题出在哪里..

xpath=//*[@class='user-number' and text() = '123']/following-sibling::*[contains(@class,'user-state')]/descendant::*[contains(@text,'User1')]

调试它的最佳方法是什么? 例如,如果

xpath=//*[@class='user-number' and text() = '123']/following-sibling::*[contains(@class,'user-state')]

找到一些元素 - 如何打印出它的text属性 - 来检查实际位于哪个元素?

2 个答案:

答案 0 :(得分:0)

你的xpath表达肯定不正确 - @text应该替换为text()(或只是.):

//*[@class='user-number' and . = '123']/following-sibling::*[contains(@class,'user-state')]/descendant::*[contains(.,'User1')]

调试xpath表达式通常使用浏览器开发人员工具完成:在firebug中或在浏览器控制台中。例如,在google-chrome控制台中,您可以执行以下操作:

$x("//*[@class='user-number' and . = '123']/following-sibling::*[contains(@class,'user-state')")

看看是否有匹配。

或者,您也可以在代码中调试它。例如(使用python),找到第一个div元素并打印出来的文字:

element = driver.find_element_by_xpath("//*[@class='user-number' and . = '123']")
print(element.text)

答案 1 :(得分:0)

元问题是,如何调试XPath表达式?

嗯,对于像这样的简单的人来说,最好只是盯着他们,直到你看到问题为止。检查名称的拼写,检查命名空间,检查空白问题。至少它比调试正则表达式更容易。

对于更复杂的XPath,请尝试分解它们。删除谓词,看看是否有所作为。或者反向工作,通过添加条件来构建路径表达式,在每个阶段检查它是否仍然找到了什么。

如果您真的认真对待XPath,请考虑使用模式感知处理:这将使您的XPath表达式与模式匹配,以确保它有意义。

考虑使用可视XPath处理器进行调试。周围有很多人。我在oXygen中使用XPath处理器(虽然不是用于调试XPath,更多是用于发现文档的内容,但这些任务通常需要一起完成。)