使用XPath查找动态表值

时间:2014-06-17 14:36:49

标签: html xpath

在这个价格动态变化的表格中,我希望始终在XPath 1.0中选择属于$ 400,00以上第一个价格的链接。正确的解决方案可能并不总是在第二行,因此tr[2]/td[1]并不总是正确的结果。

<table>
   <tr>
      <td><a href="/somesite/page.htm?id=1">1</a></td>
      <td>-$200,00</td>
   </tr>
   <tr>
      <td><a href="/somesite/page.htm?id=2">2</a></td>
      <td>$500,00</td>
   </tr>
   <tr>
      <td><a href="/somesite/page.htm?id=3">3</a></td>
      <td>$100,00</td>
   </tr>
</table>

到目前为止最接近的我(非工作)XPath是:

//tr/td[2][starts-with(.,'$')]/(number(substring-after(.,'$')))>400.00/preceding-sibling::td
  • 使用td[2]
  • 选择价格
  • 它只选择具有正值的价格(我不需要负值)
  • 从剩余价格
  • 中删除$个符号

问题在于:

  • 我正在尝试使用数字将字符串转换为数字,因此我可以将它们与400进行比较(这不起作用)
  • 之后,我尝试在找到合适的价格后选择相应的链接。

任何帮助都会非常感激(我只是一个简单的测试人员被拖入了测试自动化的神奇世界):))

1 个答案:

答案 0 :(得分:1)

  

我希望始终在XPath 1.0中选择属于$ 400,00以上第一个价格的链接。

那将是

//td[number(translate(normalize-space(), ',$', '.')) > 400]/..//a

请注意,我将,翻译为.并将$翻译为 ** ,因此,如果您的号码格式更进一步(数字分组,例如)这可能还不是100%正确。了解您的数据,进行适当的更改。

为了它的乐趣(并展示XPath的灵活性),这里有一个不同的路径,结果相同:

//a[../..//td[number(translate(normalize-space(), ',$', '.')) > 400]]

** translate()将一个字符列表替换为另一个字符:

  • translate('abc', 'ac', 'AC')返回'AbC'
  • translate('abc', 'ac', 'A')返回'Ab'