我的网页看起来像这样:
<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是什么(“标题”,“标题”,“其他标题”)。关键是未指定<li>
元素的顺序。每次加载页面后可能会有所不同。是否有任何方法如何使用xpath发现页面的某个结构?我有一个关于如何解决这个问题的概念,但是在我要用C#
编写迭代来发现我问你的页面之前。
提前致谢!
答案 0 :(得分:3)
首先,id应该是唯一的,因此你所描绘的网页在测试时效果不佳。
我做了测试,然后让一些XPath定位器用于选择特定的标题(虽然我建议你修复你的网页而不是实际使用它):
//li[@id='item']/span/span
//li[@id='item'][1]/span/span
//li[@id='item'][3]/span/span
如果您正在使用所有三个标题,则可以尝试Dimitre Novatchev's suggestion:
//span[@class='title']
这应该会在页面上显示所有标题。
我想说一件事,但是如果你进入Selenium,我建议你使用download Selenium IDE extension用于Firefox。这对初学者来说是一个很棒的工具。它可以帮助您通过记录网站上的点击次数来进行Selenium测试,还可以帮助您自动生成和测试XPath定位器和其他定位器。
再次:我建议你不要创建一个有重复id元素的网站: - )
答案 1 :(得分:2)
Selenium是否支持XPath表达式,如:
//span[@class='title']
如果是,请使用上面的XPath表达式。它选择XML文档中的每个span
元素,其class
属性的字符串值为"title"
。
我建议使用the XPath Visualizer 之类的工具来播放不同的XPath表达式,并查看源XML文档中突出显示的所选节点。