【问题标题】:How do I select the last span element from a specific ul element with xpath?如何使用 xpath 从特定 ul 元素中选择最后一个 span 元素?
【发布时间】:2016-05-19 12:58:06
【问题描述】:

我正在使用 Selenium 自动化一些 Web 测试,需要通过 xpath 选择元素。

<ul class="class1">
      <div>
        ...
            <span class="spanClass"> Text </span>
        ...
      </div>
</ul>
<div class="class2">
      <div>
        ...
            <span class="spanClass"> Text </span>
        ...
      </div>
</div>

如果我使用这样的 xpath:

(//ul[@class='class1']//span)[last()]

这会从 div class2 中选择最后一个 span 元素。但我需要 ul class1 中的最后一个 span 元素。

据我了解,我需要使用“.//span”而不是“//span”,所以我尝试了:

(//ul[@class='class1'].//span)[last()]

但这不是一个有效的表达式。但是,如果我这样做:

(//ul.//span)[last()]

现在这是一个有效的表达式,但不保证我使用正确的 ul 元素作为节点(无论如何,对于我想要的东西,它似乎也不正确)。所以这行不通。

我只想从 ul class1 中选择最后一个 span 元素。 ul class1 和 div class2 中将有未知数量的相同 span 元素。所以我不能选择第 N 个跨度元素,因为我不知道这个数字。

【问题讨论】:

    标签: xpath


    【解决方案1】:

    (//ul[@class='class1']//span)[last()] 应该已经完成​​了你想要的。表达式的意思是,在ul[@class='class1'] 中找到所有span,只返回最后一个。查看演示 here。给定输入 HTML,如下所示:

    <root>
    <ul class="class1">
          <div>
            ...
                <span class="spanClass"> Text 1</span>
            ...
          </div>
    </ul>
    <div class="class2">
          <div>
            ...
                <span class="spanClass"> Text 2</span>
            ...
          </div>
    </div>
    </root>
    

    ..输出是&lt;span class="spanClass"&gt; Text 1&lt;/span&gt;,正如所愿。

    最后一个表达式(//ul.//span)[last()],虽然有效,但它并没有按照您的想法执行。它将尝试在 &lt;ul.&gt;(注意点)元素中查找所有 &lt;span&gt;,然后仅返回最后找到的 &lt;span&gt;

    【讨论】:

    • 感谢您的确认!这清楚地表明我忽略了 html 中的某些内容。原来有第二个 ul class1 隐藏在 div class2 中。已解决:((//ul[@class='class1'])[1]//span)[last()]
    猜你喜欢
    • 2019-02-05
    • 2010-10-02
    • 1970-01-01
    • 2023-01-29
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多