0

当我运行以下程序时,为什么控制台会打印“0”?我希望打印“1”,因为我希望该findElements()方法使用 xpath 找到链接。xpath 表达式不正确吗?通过选择链接元素并复制给定的 xpath,我使用 Firefox、Firebug 和 Firepath 获得了表达式。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.By;
import java.util.List;

public class SeleniumSearch {
    static WebDriver driver = new FirefoxDriver();

    public static void main(String[] args) {

        try {
            driver.get("http://www.google.co.uk/");
            submitSearch("selenium");
            getHit();
        }
        finally {
            driver.close();
        }
    }

    static void submitSearch(String search) {
        WebElement searchBox = driver.findElement(By.name("q"));
        searchBox.sendKeys(search);
        searchBox.submit();
    }

    static void getHit() {
        List<WebElement> hits = driver.findElements(By.xpath("html/body/div[5]/div[4]/div[9]/div[1]/div[3]/div/div[3]/div[2]/div/div/div/div[2]/div[1]/div/h3/a"));
        System.out.println(hits.size());
    }
}

Firepath 给出的 xpath 的屏幕截图

4

4 回答 4

2

尝试将以下内容作为 xpath 而不是实际路径: //*[@id="rso"]/div[2]/div[1]/div/h3/a

于 2016-05-24T13:56:18.780 回答
1

我会使用一个简单的 xpath,例如html/body//h3/a. 您还可以使用 FireBug 的 FirePath 扩展来构建和评估 xpath。

于 2016-05-24T15:49:59.077 回答
1

我可以为谷歌搜索中的第一个链接想出的最简单的 xpath:

(//h3/a)[1]
于 2016-05-24T16:40:11.653 回答
1
xpath("html/body/div[5]/div[4]/div[9]/div[1]/div[3]/div/div[3]/div[2]/div/div/div/div[2]/div[1]/div/h3/a")

这对 xpath 来说是错误的,网站上的一点点改动,你的代码就不起作用了!尝试更动态地找到最接近的 id 或标签名称并从那里继续,你能分享你的 html 源代码吗?

于 2016-05-24T13:39:39.623 回答