为什么Selenium没有通过xpath找到元素?

时间:2016-05-24 13:05:21

标签: java selenium xpath firebug firepath

当我运行以下程序时,为什么“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());
    }
}

Screen shot of the xpath given by Firepath

4 个答案:

答案 0 :(得分:2)

尝试将以下内容作为xpath而不是实际路径: // * [@ ID = “RSO”] / DIV [2] / DIV [1] / DIV / H3 / A

答案 1 :(得分: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源吗?

答案 2 :(得分:1)

我会使用像html/body//h3/a这样的简单xpath。 您还可以使用FireBug的FirePath扩展来构建和评估xpath。

答案 3 :(得分:1)

最简单的xpath我可以在google搜索中找到第一个链接:

(//h3/a)[1]