对于一个元素上两个属性的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和标题。感谢您的帮助!
答案 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']
您可以结合使用这些谓词过滤器,并使用and
和or
运算符在同一谓词中测试多个表达式。
//*[@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']"));