有人可以解释为啥 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java)

Posted

技术标签:

【中文标题】有人可以解释为啥 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java)【英文标题】:Can somebody explain why Selenium simple program is not working ? (On Mac using Maven-Java)有人可以解释为什么 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java) 【发布时间】:2020-07-03 19:19:26 【问题描述】:

我是 Selenium 新手,无法运行最简单的程序:

public static void main(String[] args) 
    WebDriver driver = new ChromeDriver();

    driver.get("https://google.com");

    HelloWorld.LOGGER.info(driver.getTitle());

我收到的错误:

Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html
    at com.google.common.base.Preconditions.checkState(Preconditions.java:754)
    at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:134)
    at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:35)
    at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:159)
    at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:355)
    at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:94)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
    at com.genesys.testing.topicsDefinitionUI.HelloWorld.main(HelloWorld.java:20)

在阅读了上面的异常之后,我在这个网站上看到了一个对我不起作用的解决方案:

public static void main(String[] args) 
    System.setProperty("WebDriver.Chrome.driver","/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome");

    WebDriver driver = new ChromeDriver();

    driver.get("https://google.com");

    HelloWorld.LOGGER.info(driver.getTitle());

我收到的错误:

Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html
    at com.google.common.base.Preconditions.checkState(Preconditions.java:754)
    at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:134)
    at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:35)
    at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:159)
    at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:355)
    at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:94)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
    at com.genesys.testing.topicsDefinitionUI.HelloWorld.main(HelloWorld.java:20)

我正在使用 MacOS - Catalina,我的 IDE 是 Intellij,这是一个 Maven 项目。

尝试将System.setProperty() 函数的第二个参数切换为路径的多种变体,但没有成功。

我错过了什么?

【问题讨论】:

【参考方案1】:

要在 chrome 浏览器上运行您的代码,您需要设置 chromedriver 的路径。 ypu haavee 在您的代码中指定了错误的 chrome 驱动程序路径

System.setProperty("webdriver.chrome.driver","chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://google.com");
System.out.println(driver.getTitle());

检查您的浏览器版本并从以下链接下载 chromedriver:

https://chromedriver.chromium.org/downloads

【讨论】:

下载并收到:线程“main”中的异常 org.openqa.selenium.WebDriverException:等待驱动程序服务器启动超时。【参考方案2】:

所以,我上面的朋友@Rock 是对的。

我确实需要下载 chrome 驱动程序。

但是,因为我正在使用 macOS Catalina,我不得不手动更改 chromedriver 文件的权限。

在这个问题的帮助下:MacOS Catalina(v 10.15.3): Error: “chromedriver” cannot be opened because the developer cannot be verified. Unable to launch the chrome browser

这就是代码现在的样子:

    public void firstTest() 
        System.setProperty("webdriver.chrome.driver","/Users/raziv/Downloads/chromedriver");
        WebDriver driver = new ChromeDriver();
        driver.get("http://google.com");
        System.out.println(driver.getTitle());
    

它运行良好

【讨论】:

以上是关于有人可以解释为啥 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java)的主要内容,如果未能解决你的问题,请参考以下文章

为啥外部链接在构建后在 phonegap 应用程序上不起作用

有人可以解释一下,我的 mysql 匹配为啥不工作

在 c++ 程序中调试链接列表以添加两个数字:有人可以解释为啥 l3=l3->next;导致错误?

为啥拖放在 Selenium Webdriver 中不起作用?

为啥 pull-right 类在 bootstrap 版本 4.1.0 上不起作用? [复制]

有人可以解释这两个 http 调用之间的区别以及为啥一个失败而另一个没有?