如何在没有 ChromeDriver.exe 的情况下在 Maven 中使用 selenium-chrome-driver

Posted

技术标签:

【中文标题】如何在没有 ChromeDriver.exe 的情况下在 Maven 中使用 selenium-chrome-driver【英文标题】:How to work with selenium-chrome-driver in Maven without ChromeDriver.exe 【发布时间】:2016-06-22 09:10:28 【问题描述】:

我为打开 Chrome 添加了以下依赖项和代码,但浏览器未打开。

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>2.50.0</version>
</dependency>

我的代码:-

package example;
import org.openqa.selenium.WebDriver;`
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
public class DepChrome 

    @Test
    public void testBrowser() 
    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();
    

【问题讨论】:

谢谢 Jain。你能告诉我如何使用 maven 依赖项使用 chrome 吗? 【参考方案1】:

如下添加依赖:

        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>3.0.0</version>
<!--            <scope>test</scope> -->
        </dependency>

来源:从以下 URL 复制新的依赖版本:

https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager

使用下面的代码:

WebDriver driver = null;
WebDriverManager.chromedriver().browserVersion("77.0.3865.40").setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized"); 
options.addArguments("enable-automation"); 
options.addArguments("--no-sandbox"); 
options.addArguments("--disable-infobars");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-browser-side-navigation"); 
options.addArguments("--disable-gpu"); 
driver = new ChromeDriver(options); 
driver.get("https://www.google.com/"); 

基本上下面的代码行了,下面的代码下载特定版本

WebDriverManager.chromedriver().browserVersion("77.0.3865.40").setup();

您可以从以下网址获取所需版本:

https://chromedriver.storage.googleapis.com/index.html

如果你正在寻找上面 chromedriver URL 上的最新依赖项,你也可以使用下面的代码而不是上面的代码

WebDriverManager.chromedriver().setup();

或(旧方式)

您需要提供以下 chrome 二进制文件的路径:

System.setProperty("webdriver.chrome.driver", "C:\\pathto\\my\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");

从 selenium 站点下载 chrome 的二进制文件,如下所示:- http://chromedriver.storage.googleapis.com/index.html?path=2.21/

现在提供二进制到 selenium 的路径:-

System.setProperty("webdriver.chrome.driver", "C:\\pathto\\my\\chromedriver.exe");

还有一件事需要注意。如果您使用的是 Windows,则使用反斜杠 \\,如果您使用的是 mac 或 linux,则使用正斜杠 // 设置路径。

希望对你有帮助:)

【讨论】:

您可以使用github.com/Ardesco/selenium-standalone-server-plugin 下载二进制文件作为 Maven 构建的一部分。 这与手动下载 chromedriver 并更改自己有什么不同?如果我们仍然必须手动设置它,那么使用 Maven 有什么意义? 正如 Gili 所说,您可以使用 Ardesco 插件和其他选项。看看这个:- ***.com/questions/7450416/selenium-2-chrome-driver Chrome 二进制文件本身能够在 Chrome 上执行脚本,无需使用 selenium-chrome 依赖我们就可以在其上执行。这里的问题属于使用 chrome-driver 依赖项。因此,如果我们添加此依赖项,则不应有任何外部下载 ChromeDriver.exe。与实际关注相比,您的答案可能适用于不同的区域。 java.lang.IllegalStateException: 驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置;【参考方案2】:

有两种方法。

    最简单的方法是从这个位置下载 chromedriver

    Download chrome web driver

    然后在您的项目中创建一个源文件夹。 (例如:BrowserDrivers)并将下载的库添加到其中。

    然后使用 setProperty 命令在自动化脚本中设置 chrome 驱动路径,如下所示。

            System.setProperty("webdriver.chrome.driver", "BrowserDrivers/chromedriver.exe"); 
    

    但还有另一种方法。这更适合 Maven 构建。 将以下依赖项添加到 POM.xml 文件中。

    有 2 个依赖项。一个用于 Chrome 驱动程序。但是要使用 chrome 驱动程序依赖项,您必须添加 webdrivermanager 依赖项。它是浏览器驱动程序的强制依赖项。所以总是你必须同时添加它们。 更多详情请参考此链接Github Webdriver manager link

    <dependency>
         <groupId>io.github.bonigarcia</groupId>
         <artifactId>webdrivermanager</artifactId>
         <version>2.2.5</version>
    </dependency>
    

    并添加 chrome 驱动程序依赖。

    <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-chrome-driver</artifactId>
         <version>2.50.0</version>//Your chrome driver version
    </dependency>
    

    然后在您的自动化脚本中使用这一行而不是 System.setProperty 命令来声明 chrome 驱动程序。

    ChromeDriverManager.getInstance().setup();
    

    更新: the use of ChromeDriverManager is deprecated,改用这个:

    import static io.github.bonigarcia.wdm.DriverManagerType.CHROME;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import io.github.bonigarcia.wdm.WebDriverManager;
    
    WebDriverManager.getInstance(CHROME).setup();
    

【讨论】:

【参考方案3】:

检查下面的代码 -

package example;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
import io.github.bonigarcia.wdm.WebDriverManager;
public class DepChrome  
    @Test
    public void testBrowser() 
        WebDriver driver;
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();        
        driver.get("https://google.com");
        String title = driver.getTitle();
        System.out.println(title);      
        driver.quit();      
    

【讨论】:

你从哪里得到这个依赖:io.github.bonigarcia.wdm.WebDriverManager 可以通过maven获取io.github.bonigarcia.wdm.WebDriverManager依赖:io.github.bonigarciawebdrivermanager 线程 "main" java.lang.IllegalStateException 中的异常:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置;【参考方案4】:

使用以下两个maven依赖,你根本不需要设置系统属性,这应该可以工作

<!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>$webdriver-manager.version</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>$selenium-chrome-driver</version>
        </dependency>
WebDriver driver;

@BeforeSuite
public void setUp()
    WebDriverManager.chromedriver().setup();
    driver = new ChromeDriver();
    driver.get("http://www.ebay.in");
    driver.manage().timeouts().implicitlyWait(5000, TimeUnit.MILLISECONDS);
    

【讨论】:

【参考方案5】:

在 Maven 中,使用 ChromeDriver.exe:

import static io.github.bonigarcia.wdm.DriverManagerType.CHROME;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import io.github.bonigarcia.wdm.WebDriverManager;

import org.testng.annotations.Test;

public class MavenTest 

    @Test
    public void TestMaven()
    
    System.setProperty("webdriver.chrome.driver", "D:\\Sumit_Backup\\Automation\\Workspace\\Maven\\src\\Browser\\chromedriver.exe");
    WebDriver driver= new ChromeDriver();
    driver.get("http://testng.org/doc/maven.html");
    driver.manage().window().maximize();


【讨论】:

不想学究气,但题主写的是without ChromeDriver.exe

以上是关于如何在没有 ChromeDriver.exe 的情况下在 Maven 中使用 selenium-chrome-driver的主要内容,如果未能解决你的问题,请参考以下文章

Mac下安装Chromedriver.exe

如何解决chrome和chromedriver版本不匹配

c#爬虫-从内存中释放Selenium chromedriver.exe终极杀

Python自动检测Chrome浏览器版本号并下载对应驱动文件[chromedriver.exe]

每日简单小妙招:使用python自动登录CSDN等各大网站

chromedriver安装