Xpath 使用selenium查找页面的某个部分
我有一个网页,看起来像这样:Xpath 使用selenium查找页面的某个部分,xpath,selenium,Xpath,Selenium,我有一个网页,看起来像这样: <html> ... <div id="menu"> ... <ul id="listOfItems"> <!--- repeated block start --> <li id="item" class="itemClass"> ... <span class="spanClass"><span class="title">title</sp
<html>
...
<div id="menu">
...
<ul id="listOfItems">
<!--- repeated block start -->
<li id="item" class="itemClass">
...
<span class="spanClass"><span class="title">title</span></span>
...
</li>
<!-- repeated block end-->
<li id="item" class="itemClass">
...
<span class="spanClass"><span class="title">title something</span></span>
...
</li>
<li id="item" class="itemClass">
...
<span class="spanClass"><span class="title">title other thing</span></span>
...
</li>
</ul>
...
</div>
...
</html>
...
...
-
...
标题
...
-
...
标题
...
-
...
标题其他东西
...
...
...
我想知道标题的xpath是什么(“title”、“title something”、“title other thing”)。关键是没有指定
元素的顺序。每次加载页面后可能会有所不同。是否有任何方法可以使用xpath发现页面的特定结构?我对如何解决这个问题有一个想法,但在我准备用C
编写迭代以发现我要问的页面之前
提前谢谢 首先,id应该是唯一的,所以当涉及到测试时,您描绘的网页将无法正常工作 不过,我做了测试,并使用了一些XPath定位器来选择特定的标题(尽管我建议您修复您的网页,而不是实际使用): 如果你想要这三个头衔,你可以试试 这将获得页面上的所有标题 但是,我想说一件事,如果你正在使用Selenium,我推荐你使用Firefox。对于初学者来说,这是一个很好的工具。它通过记录您在网站上的点击来帮助您进行Selenium测试,还可以帮助您自动生成和测试XPath定位器和其他定位器
再说一次:我建议您不要创建具有重复id元素的网站:-)Selenium是否支持类似以下XPath表达式:
//span[@class='title']
如果是,则使用上述XPath表达式。它选择XML文档中的每个span
元素,其class
属性的字符串值为“title”
我建议使用类似的工具来处理不同的XPath表达式,并查看源XML文档中突出显示的选定节点。在java驱动程序api上,有一个
driver.findElements(By.XPath(//div//span[contains(@class,'title'))
这样就行了。希望C#API是类似的。仅仅两个小时后,我注意到我的大括号和引号没有正确关闭:driver.findElements(By.xpath(//div[@id='menu']]//span[contains(@class,'title'))
。我更喜欢在css类中使用contains(尽管如果你这样做的话,你可能应该规范化空白)以防你动态地添加类。我还尝试在具有确定id的东西下选择元素(菜单div或列表项ul)只是为了减少不正确的匹配。除非您完全确定要查找的元素始终只有一个类,否则不建议使用@class='title'。相反,我建议您使用//span[contains(@class,'title')。此外,为了回答您的问题,是的,Selenium确实支持类似您发布的XPath表达式:)如果您对页面制作有任何输入,请坚持开发约定,即不同的元素“类型”具有唯一标识符。@ohaal:是的,我不需要被提醒类
属性的值可能是什么。我的解决方案解决了作者在这里提出的具体问题——它故意不通用“我不明白你的评论以及它与当前问题的关系——请你详细说明一下好吗?@RossPatterson:是的,如果示例XML包含这样的class
属性,我肯定会推荐exac这就是答案。
//span[@class='title']
//span[@class='title']