【问题标题】:Xpath creation issueXpath 创建问题
【发布时间】:2019-08-05 04:09:27
【问题描述】:

我正在使用 Selenium WebDriver 和 eclipse (2019-06) 来做一些测试用例。我将 xpath 与运行正常的 webDriver 一起使用。但是我尝试在我的 DOM 中获取一些信息,但我找不到正确的 xpath 来捕捉我想要的东西。

我正在创建一些 Assert 来比较找到的值与我页面中的 xpath 以及我在 excel 文件中获得的信息。 我的代码是 html 表中的结构,我需要捕获的信息与其他信息在同一行,我不知道如何只捕获一个。

我的表的简化结构是:

<table>
 <tr>
  <td class="fp1 gray">
    <label>Portfolio</label>
  </td>
  <td class="data">
   <b class="xh-highlight">numPortfolio</b>
  </td>

  <td class="fp1 gray">
   <label>Instrument</label>
  </td>
  <td class="data">
   <b class="xh-highlight">numInstrument</b>
  </td>
 </tr>
</table>

我用来获取投资组合“numPortfolio”值的 xpath 是:

//tr[td[@class='fp1 gray']='Portfolio']/td[@class='data']/b[1]

我正在搜索类等于“数据”的“b”的值,并且之前的“td”包含类等于“fp1 gray”的“投资组合”。

对于工具“numInstrument”的值:

//tr[td[@class='fp1 gray']='Instrument']/td[@class='data']/b[1]

但是这种 xpath 总是返回“numPortfolio”和“labelInstrument”,我不知道如何指定我只想要 'b' 的值,而不是每个 'b'在“tr”中。

感谢您的帮助

【问题讨论】:

    标签: java selenium xpath


    【解决方案1】:

    这是您可以使用的 xpath。

    //td[@class='fp1 gray' and label[normalize-space(.)='Portfolio']]/following-sibling::td[1]/b
    
    //td[@class='fp1 gray' and label[normalize-space(.)='Instrument']]/following-sibling::td[1]/b
    

    截图:

    【讨论】:

    • 非常感谢@supputuri 你有提供xpath 的扩展吗?你在用谷歌浏览器吗?
    【解决方案2】:

    关于提供 xpath 的扩展程序,您可以使用名为 XPath Helper 的 Google Chrome 扩展程序找到 here

    您也可以(如果您使用的是 Google Chrome)检查该网页,方法是右键单击网页,然后选择“检查”。检查页面时,可以右键单击检查器中的任何元素并选择复制 -> 复制 XPath。

    但是,这可能并不总是提供最好的 xpath。在这种情况下,检查器提供了路径/html/body/table/tbody/tr/td[2]/b,而使用 //td[@class='fp1 gray' and label[contains(text(),'Portfolio')]]/following-sibling::td[1]/b 路径可能更好,因为它具有正确的类名和文本属性。

    【讨论】:

    • 感谢@supersoffi 的回答。我已经在使用你建议我的扩展了!
    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2010-10-07
    • 2013-10-15
    • 2011-02-21
    • 2011-08-13
    • 2011-09-08
    相关资源
    最近更新 更多