【问题标题】:Why doesn't Selenium find element by xpath?为什么 Selenium 不能通过 xpath 找到元素?
【发布时间】:2020-04-17 00:55:19
【问题描述】:

当我运行以下程序时,为什么控制台会打印 '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());
    }
}

【问题讨论】:

  • XPath 应该返回什么?
  • 我希望 XPath 返回第一个 google 搜索结果链接的 web 元素。 (然后我会展开程序以单击 web 元素。)
  • 使用html/body/div[1]/div[5]/div[4]/div[7]/div[1]/div[3]/div/div[3]/ div[2]/div/div/div/div[2]/div[1]/div/h3/a 这个xpath uor xpath对我来说看起来不太好,上面的xpath也是由firebug给出的
  • 使用 Css 选择器会更简单:By.cssSelector(".r")。请注意,由于内容是动态的,因此您需要等待第一个元素出现。
  • 感谢 Florent B。我对 cssSelectors 还不太熟悉,但这个解决方案看起来也简单得多。

标签: java selenium xpath firebug firepath


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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 源代码吗?

    【讨论】:

    • 感谢 Leon Barkan 的提示。该 google 页面有很多 html,所以我没有包含它,但我添加了 Firebug 工具(包括 Firepath 工具)的屏幕截图,以显示我从哪里获得 xpath。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      (//h3/a)[1]
      

      【讨论】:

      • 谢谢理查德 - 我现在已经用过这个了,看起来和使用起来好多了!
      猜你喜欢
      • 2021-03-20
      • 2014-08-19
      • 2017-07-12
      • 1970-01-01
      • 2022-07-05
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多