两个属性的xpath

时间:2018-08-28 22:49:16

标签: java html selenium xpath

对于一个元素上两个属性的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和标题。感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

具有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']

答案 1 :(得分:1)

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

您可以通过以下方式找到元素

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

标签的目标。

答案 2 :(得分:0)

您是否可以尝试使用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']"));