我使用Selenium来获取嵌套在XPath中的一些数据。
<a href="https://linkhere" class="btn btn-primary btn-xs " target="_blank">Download</a>
不幸的是,它嵌套在没有唯一标识符的元素列表中。
<li class="list-group-item">
<span class="btn btn-primary btn-xs play" title="Play audio" data-i18n="[title]clickToPlay">
<span class="glyphicon glyphicon-play"></span>
</span>
<div class="btn-group pull-right badge-download">
<a href="#" class="btn btn-primary btn-xs dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Bitrate</a>
<ul class="dropdown-menu">
<li class="divider"></li>
<li><a href="" data-stream="" data-duration="282" class="info-link" target="_blank">...</a></li>
</ul>
<a href="#" class="btn btn-primary btn-xs" aria-expanded="false"> 4:42</a>
<a href="" class="btn btn-primary btn-xs " target="_blank">Download</a>
</div>
<a class="name" title="Download" data-i18n="[title]clickToDownload" data-src="" href="" target="_blank">
</a>
Escape The Fate - Hate Me
</li>
现在,这只是在一堆<li>
元素中不断重复,但我似乎无法获得第一个元素。
我在Java中使用Selenium。
我尝试过使用getByLinkText Download
并且没有用。我尝试在第一个索引处使用XPath作为锚元素,但是也无法正常工作。
WebElement downloadButton = driver.findElement(By.xpath("(//LI[@class='list-group-item'])[1]"));
driver.findElement(By.xpath("//a[text()='Download']")).click();
答案 0 :(得分:0)
你可以试试这个Xpath吗?
WebElement downloadButton = driver.findElement(By.xpath(".//div[contains(@class,'badge-download')]/.//a[text()='Download']"));
downloadButton.click();
答案 1 :(得分:0)
使用提供的HTML,您可以执行以下操作:
WebElement li= driver.findElementByClassName("list-group-item");
li.findElement(By.xpath("//div[@class='btn-group pull-right badge-download']" + "/a[contains(text(), 'Download')]")).click();
答案 2 :(得分:0)
试试这个XPath,它正在运行:
//a[contains(@class,'btn btn-primary btn-xs') and contains(text(),'Download')]
在代码中试试这个:
WebElement downloadBtn = driver.findElement(By.xpath("//a[contains(@class,'btn btn-primary btn-xs') and contains(text(),'Download')]"));
downloadBtn.click();