嵌套的XPath无法正常工作?

时间:2017-11-09 07:04:13

标签: java selenium xpath selenium-webdriver

我使用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();

3 个答案:

答案 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();