【问题标题】:How can I get the last element using Xpath in Appium如何在 Appium 中使用 Xpath 获取最后一个元素
【发布时间】:2020-03-28 09:51:33
【问题描述】:

例如,我的 Android 应用中有消息元素,它们都有一个名为 "message_view"resource-id。 我想要的是仅使用 Xpath 获取带有此资源 ID 的最后一条消息。我尝试使用[last()],但它不起作用:

driver.findElement (By.xpath ("//*[contains(@resource-id,'message_view')][last()]"));

我知道我可以使用findElements(),然后是.get(list.size() - 1)。但我想了解如何仅使用 Xpath 来做到这一点。

【问题讨论】:

    标签: java android xpath automation appium


    【解决方案1】:

    在 Xpaths 中,[] 的优先级高于 //,因此在给定的 Xpath 中,last() 不起作用,因为它首先执行而不是最后执行。使用一对括号来强制它按预期工作:

    (//*[contains(@resource-id,'message_view')])[last()]
    

    【讨论】:

      【解决方案2】:

      您需要用() 包装定位器,正如另一个答案中提到的那样。

      我将解释//locator[last()](//locator)[last()]之间的区别

      假设你有以下 DOM:

      <div>
        <div>
         <p1></p1> // 1
         <p1></p1> // 2
        </div>
        <div>
         <p1></p1> // 3
         <p1></p1> // 4
        </div>
      </div>
      

      使用//p1[last()],您会找到所有 p1 元素,它们是其节点中的最后一个元素(兄弟姐妹的最后一个),因此它是第 2 个和第 4 个 p1 元素。

      通过(//locator)[last()] 定位器,您将找到所有 p1 节点,然后选择最后一个(实际上是 DOM 中的最后一个 p1 节点),因此它是第 4 个 p1 元素。

      【讨论】:

        猜你喜欢
        • 2020-08-04
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2019-11-16
        相关资源
        最近更新 更多