猿问

两个属性的 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 和标题上查询它们。谢谢您的帮助!


慕无忌1623718
浏览 187回答 3
3回答

蛊毒传说

第一个带contains()函数的谓词有问题。contains()接受两个参数。第一个参数是要测试的值,第二个是要搜索的值。它应该是[contains(@href,'/file/download/id/" + downloadID + "')]或者你可以用&nbsp;[@href='/file/download/id/" + downloadID + "']XPath 的最后一部分有几个问题:&nbsp;/@*[title()='Download file']/@*&nbsp;您不是将另一个谓词过滤器应用于匹配的元素,而是选择所有匹配的元素属性,然后[title()='Download file']是一个谓词过滤器,它试图只选择title()等于“下载文件”的属性但是,没有title()节点选择器或函数来过滤这些属性您可以使用多个谓词并将 XPath 的最后一部分调整为://*[@href='/file/download/id/"&nbsp;+&nbsp;downloadID&nbsp;+&nbsp;"'][@title='Download&nbsp;file']您可以组合这些谓词过滤器并使用and和or运算符测试同一谓词中的多个表达式。//*[@href='/file/download/id/"&nbsp;+&nbsp;downloadID&nbsp;+&nbsp;"'&nbsp;and&nbsp;@title='Download&nbsp;file']

翻翻过去那场雪

您提供的元素没有可用的 ID,您可以通过以下方式定位元素://a[@title='Download&nbsp;file'&nbsp;and&nbsp;@href='/file/download/id/1169']标签的目标。

慕的地10843

你能用 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']"));
随时随地看视频慕课网APP

相关分类

Java
我要回答