Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 使用selenium查找页面的某个部分_Xpath_Selenium - Fatal编程技术网

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']