【问题标题】:xpath for two attributes两个属性的 xpath
【发布时间】:2019-02-03 15:17:36
【问题描述】:

我在一个元素上的两个属性的 xpath 语法上遇到问题。

这是我的代码:

WebElement dlFileBtn = driver.findElement(
   By.xpath("//*[contains(@href='/file/download/id/" + downloadID + "')]" 
          + "/@*[title()='Download file']"));

这是该元素的 HTML:

<a title="Download file" alt="Right-click to download. (Hold-click Mac.)" 
   target="dlfile" data-isimage="false" class="download" 
   href="/file/download/id/1169">Download file</a>

由于有两个具有相同href 的按钮,我需要查询它们的ID 和标题。感谢您的帮助!

【问题讨论】:

  • 你能用你的用例和相关 HTML 的更多细节来更新这个问题吗?

标签: java html selenium xpath


【解决方案1】:

contains() 函数的第一个谓词有问题。

  • contains() 接受两个参数。第一个参数是要测试的值,第二个是要搜索的值。应该是[contains(@href,'/file/download/id/" + downloadID + "')]
  • 或者您可以使用[@href='/file/download/id/" + downloadID + "'] 测试整个值

XPath 的最后一部分有几个问题:/@*[title()='Download file']

  • /@* 不是对匹配的元素应用另一个谓词过滤器,而是选择所有匹配的元素属性,然后
  • [title()='Download file'] 是一个谓词过滤器,它尝试仅选择 title() 等于“下载文件”的属性
  • 但是,没有 title() 节点选择器或函数来过滤这些属性

您可以使用多个谓词并将 XPath 的最后一部分调整为:

//*[@href='/file/download/id/" + downloadID + "'][@title='Download file']

您可以组合这些谓词过滤器并使用andor 运算符在同一个谓词中测试多个表达式。

//*[@href='/file/download/id/" + downloadID + "' and @title='Download file']

【讨论】:

    【解决方案2】:

    您提供的元素上没有可用的 ID,

    您可以通过以下方式定位元素:

    //a[@title='Download file' and @href='/file/download/id/1169']
    

    标签的目标。

    【讨论】:

      【解决方案3】:

      您能否检查以下带有 cssSelector 或 xpath 的选项是否适合您,试一试;

      WebElement ele1 = driver.findElement(By.cssSelector("a[id='Id goes here'][title='Download file']"));
      WebElement ele1 = driver.findElement(By.xpath("//a[@id='Id goes here'][@title='Download file']"));
      

      【讨论】:

        猜你喜欢
        • 2019-04-15
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-05
        • 2011-01-01
        • 1970-01-01
        相关资源
        最近更新 更多