【问题标题】:jmeter xpath locate element through text and parentjmeter xpath通过文本和父元素定位元素
【发布时间】:2023-03-25 20:05:01
【问题描述】:

我得到一个 xml 并想通过 XPath Extractor 提取一个元素的值,但是它在 jmeter 中返回“断言失败消息:-1”。

<flag>
    <sample>123</sample>
    <others>...</others>
    <target>a test sample</target>
</flag>
<flag>
    <sample>1234</sample>
    <others>...</others>
    <target>a test sample</target>
</flag>

为了获取元素&lt;target&gt;的文本,其中&lt;sample&gt;为123,尝试了几种方法但都失败了:

  • //flag[sample='123']/target
  • //sample[.='123']/../target
  • //sample[@value='123']/../target/@value
  • //sample[text()='123']/../target/text()

有没有办法捕获元素&lt;target&gt;的值?

【问题讨论】:

  • 第一个是您场景中正确的 XPath...
  • 可能是您的示例中的拼写错误,但 &lt;others&gt;...&lt;others&gt; 应该是 &lt;others&gt;...&lt;/others&gt;

标签: xpath jmeter


【解决方案1】:

你需要确定你想要做什么,这是获取文本和获取元素之间的一个很大的区别。

要查找元素,您至少有 3 个选项:

  1. flag 中找到 target,它有一个 sample 子节点,其中包含 123 个文本
    //flag[./sample[textt()='123']]/target

  2. 找到包含 123 个文本的 sample,转到父级并找到 target
    //sample[textt()='123']/../target

  3. 找到文本为 123 的 sample 并获取 target 兄弟
    this you need to discover yourself

现在您有了可以使用的对象元素。 如果你想要文字那么你需要添加/text()

【讨论】:

    【解决方案2】:

    你应该使用类似的东西:

    //sample[text()='123']/parent::*/target/text()='a test sample'
    

    演示(假设XPath Tester mode of theView Results Tree监听器):

    参考资料:

    【讨论】:

      【解决方案3】:

      谢谢大家,我不知道为什么所有的解决方案都失败了;相反,正则表达式提取器起作用。也许 XPath Extractor 无法处理这类情况。

      【讨论】:

        猜你喜欢
        • 2013-10-14
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-13
        • 1970-01-01
        • 2014-03-21
        相关资源
        最近更新 更多