webdrivermanager, 在Java的运行时中,自动管理 Selenium WebDriver 二进制文件

分享于 

18分钟阅读

GitHub

  繁體 雙語
Library aimed to automate the Selenium Webdriver binaries management in runtime for Java
  • 源代码名称:webdrivermanager
  • 源代码网址:http://www.github.com/bonigarcia/webdrivermanager
  • webdrivermanager源代码文档
  • webdrivermanager源代码下载
  • Git URL:
    git://www.github.com/bonigarcia/webdrivermanager.git
    Git Clone代码到本地:
    git clone http://www.github.com/bonigarcia/webdrivermanager
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/bonigarcia/webdrivermanager
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Maven CentralBuild StatusQuality Gatecodecovbadge-jdkLicense badgeSupport badgeTwitter

    WebDriverManager

    这个库旨在在运行时自动化Java的 Selenium WebDriver 插件二进制管理。

    If的是,你需要下载一个二进制文件,以便你可以在 //英镑,英镑,英镑,英镑,英镑等浏览器中使用。 此外,必须将这里二进制文件的绝对路径设置为JVM属性,如下所示:

    System.setProperty("webdriver.chrome.driver", "/absolute/path/to/binary/chromedriver");System.setProperty("webdriver.gecko.driver", "/absolute/path/to/binary/geckodriver");System.setProperty("webdriver.opera.driver", "/absolute/path/to/binary/operadriver");System.setProperty("phantomjs.binary.path", "/absolute/path/to/binary/phantomjs");System.setProperty("webdriver.edge.driver", "C:/absolute/path/to/binary/MicrosoftWebDriver.exe");System.setProperty("webdriver.ie.driver", "C:/absolute/path/to/binary/IEDriverServer.exe");

    因为它强迫你直接将这个二进制文件链接到你的Java源代码,这是非常烦人的。 另外,在发布二进制文件的新版本时,你必须手动检查。 WebDriverManager来营救,以自动化方式执行所有这些肮脏的工作给你。

    WebDriverManager是开源的,它是根据许可协议发布的。

    用法

    为了在 Maven 项目中使用 WebDriverManager,你需要在 pom.xml ( 要求 Java 7或者更高) 中添加以下依赖项:

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

    测试通常使用 WebDriverManager,因此,典型的范围是测试 ( <scope>test</scope> )。

    一旦我们包含了这个依赖项,你就可以让WebDriverManager为你管理二进制。 看看这个使用 Chrome 和 Selenium WebDriver ( 为了使用WebDriverManager和昂贵的junit4 5,我们推荐使用扩展硒( jupiter ) )的JUnit 4示例:

    publicclassChromeTest {
     privateWebDriver driver;
     @BeforeClasspublicstaticvoidsetupClass() {
     WebDriverManager.chromedriver().setup();
     }
     @BeforepublicvoidsetupTest() {
     driver =newChromeDriver();
     }
     @Afterpublicvoidteardown() {
     if (driver !=null) {
     driver.quit();
     }
     }
     @Testpublicvoidtest() {
     // Your test code here }
    }

    请注意只是添加了 WebDriverManager.chromedriver().setup(); WebDriverManager为你提供魔力:

    • 它检查最新版本的二进制文件。
    • 如果它不存在于你的系统上,它将下载。
    • 它导出 selenium 所需的WebDriver Java 环境变量。

    目前,WebDriverManager支持英镑 Chrome,英镑 Firefox,英镑 Opera,英镑 PhantomJS,Microsoft边缘, IE。 为此,它为这些浏览器提供了几个驱动程序管理器。 可以按如下方式使用这些驱动程序管理器:

    WebDriverManager.chromedriver().setup();WebDriverManager.firefoxdriver().setup();WebDriverManager.operadriver().setup();WebDriverManager.phantomjs().setup();WebDriverManager.edgedriver().setup();WebDriverManager.iedriver().setup();

    便笺

    此外,WebDriverManager提供了通用的驱动程序管理器。 这里管理器可以使用 selenium 驱动程序类进行参数化( 比如。 org.openqa.selenium.chrome.ChromeDriver , org.openqa.selenium.firefox.FirefoxDriver 等,如下所示:

    importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.chrome.ChromeDriver;importio.github.bonigarcia.wdm.WebDriverManager;//.. .Class<? extends WebDriver> driverClass =ChromeDriver.class;WebDriverManager.getInstance(driverClass).setup();WebDriver driver = driverClass.newInstance();

    使用枚举 DriverManagerType 也可以参数化这里通用的驱动程序管理器。 例如如下所示:

    import staticio.github.bonigarcia.wdm.DriverManagerType.CHROME;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.chrome.ChromeDriver;importio.github.bonigarcia.wdm.WebDriverManager;//.. .WebDriverManager.getInstance(CHROME).setup();WebDriver driver =newChromeDriver();

    示例

    查看 WebDriverManager示例使用WebDriverManager的一些 JUnit 4测试。

    WebDriverManager API

    WebDriverManager通过构建器 Pattern 公开它的API。 这意味着,给定一个 WebDriverManger 实例,它们的能力可以使用不同的方法进行调整。 下表总结了 WebDriverManager API,以及等效的配置键:

    方法描述等效配置键
    version()默认情况下,WebDriverManager尝试下载给定驱动程序二进制文件的最新版本。 可以使用这里方法指定具体版本。wdm.chromeDriverVersionwdm.operaDriverVersionwdm.internetExplorerVersionwdm.edgeVersionwdm.phantomjsDriverVersionwdm.geckoDriverVersion
    forceCache()默认情况下,WebDriverManager连接到特定的驱动程序存储库 URL,以找出最新版本的二进制文件。 这可以避免使用本地存储库中的最新版本。wdm.forceCache=true
    forceDownload()默认情况下,WebDriverManager会查找二进制文件的最新版本,如果存在的话,它会使用缓存的版本。 这里选项强制再次下载二进制文件,即使该二进制文件以前已经被缓存。wdm.override=true
    useBetaVersions()默认情况下,WebDriverManager跳过测试版本。 使用这里方法,WebDriverManager还将下载测试版本。wdm.useBetaVersions=true
    architecture(Architecture arch)对于运行测试用例的平台,WebDriverManager默认会尝试使用适当的二进制代码( 例如。 可以通过强制给定架构来更改 32位 或者 64 -bit: 32-bits ( Architecture.x32 ) 或者 64-bits ( Architecture.x64 ) ;wdm.architecture
    arch32()强制使用给定驱动程序二进制文件的32位 版本。wdm.architecture=32
    arch64()强制使用给定驱动程序二进制文件的64位 版本。wdm.architecture=64
    operativeSystem(OperativeSystem operativeSystem)默认情况下,WebDriverManager下载与运行测试的计算机相同的操作系统的二进制文件。 可以使用这里方法更改这里方法( 接受值: WINLINUXMAC )。wdm.os=WINwdm.os=LINUXwdm.os=MAC
    driverRepositoryUrl(URL url)这里方法允许更改存储库 URL,其中二进制为主机( 有关默认值,请参阅下一节)。wdm.chromeDriverUrlwdm.operaDriverUrlwdm.internetExplorerDriverUrlwdm.edgeDriverUrlwdm.phantomjsDriverUrlwdm.geckoDriverUrl
    useMirror()npm.taobao.org 站点是一个托管不同软件资产的镜像。 其中,它拥有 chromedriver,geckodriver,OperaDriver driver和phantomjs驱动程序。 因此,这里方法可以用于 Chrome。Firefox。Opera 和 PhantomJS,以强制使用 taobao.org 镜像。wdm.useMirror=true
    proxy(String proxy)将HTTP代理用于Internet连接。wdm.proxy
    proxyUser(String username)指定HTTP代理的用户名。wdm.proxyUser
    proxyPass(String password)为HTTP代理指定密码。wdm.proxyPass

    下表包含一些示例:

    示例说明
    WebDriverManager.chromedriver().version("2.26").setup();强制使用 chromedriver的版本 2.26
    WebDriverManager.firefoxdriver().arch32().setup();强制使用 32位 版本的geckodriver。
    WebDriverManager.operadriver().forceCache().setup();强制使用 OperaDriver的缓存版本。
    WebDriverManager.phantomjs().useMirror().setup();强制使用 taobao.org 镜像下载 phantomjs 驱动程序
    WebDriverManager.chromedriver().proxy("server:port").setup();使用代理 server:port 连接

    配置

    WebDriverManager的配置参数在 webdrivermanager.properties file: 中设置

    wdm.targetPath=~/.m2/repository/webdriverwdm.forceCache=falsewdm.override=falsewdm.useBetaVersions=falsewdm.timeout=30wdm.chromeDriverUrl=https://chromedriver.storage.googleapis.com/wdm.chromeDriverMirrorUrl=http://npm.taobao.org/mirrors/chromedriverwdm.chromeDriverExport=webdriver.chrome.driverwdm.geckoDriverUrl=https://api.github.com/repos/mozilla/geckodriver/releaseswdm.geckoDriverMirrorUrl=http://npm.taobao.org/mirrors/geckodriverwdm.geckoDriverExport=webdriver.gecko.driverwdm.operaDriverUrl=https://api.github.com/repos/operasoftware/operachromiumdriver/releaseswdm.operaDriverMirrorUrl=http://npm.taobao.org/mirrors/operadriverwdm.operaDriverExport=webdriver.opera.driverwdm.phantomjsDriverUrl=https://bitbucket.org/ariya/phantomjs/downloads/wdm.phantomjsDriverMirrorUrl=http://npm.taobao.org/mirrors/phantomjswdm.phantomjsDriverExport=phantomjs.binary.pathwdm.edgeDriverUrl=https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/wdm.edgeExport=webdriver.edge.driverwdm.internetExplorerDriverUrl=https://selenium-release.storage.googleapis.com/wdm.internetExplorerExport=webdriver.ie.driver

    变量 wdm.targetPath 是将存储二进制文件的默认文件夹。 注意,默认情况下,Maven 本地存储库的路径是。 使用变量 wdm.chromeDriverUrlwdm.operaDriverUrlwdm.internetExplorerDriverUrlwdm.edgeDriverUrlwdm.phantomjsDriverUrl 和来设置最新版本的Chrome。Opera。IE。边缘和 Firefox的url。

    这些属性可以由Java系统属性覆盖,例如:

    System.setProperty("wdm.targetPath", "/my/custom/path/to/driver/binaries");

    。或者通过 命令行,例如:

    -Dwdm.override=true

    默认情况下,WebDriverManager下载最新版本的二进制文件。 但是,可以通过将变量 wdm.chromeDriverVersionwdm.operaDriverVersionwdm.internetExplorerVersion 或者 wdm.edgeVersion的值改变为具体版本来强制具体版本。 举个例子:

    -Dwdm.chromeDriverVersion=2.25
    -Dwdm.internetExplorerVersion=2.46
    -Dwdm.operaDriverVersion=0.2.0
    -Dwdm.edgeVersion=3.14366
    -Dwdm.phantomjsDriverVersion=2.1.1
    -Dwdm.geckoDriverVersion=0.11.1

    如果没有指定版本,WebDriverManager将向承载二进制文件的服务器发送一个请求。 为了避免这里请求,并检查以前是否下载了任何二进制文件,可以使用关键 wdm.forceCache

    As,这些属性的值可以通过环境变量来覆盖。 这些变量的名称是以大写形式放置的,并用 _ 替换符号 .。 例如属性 wdm.targetPath 可以由环境变量 WDM_TARGETPATH 重写。

    HTTP代理

    如果在Internet连接中使用HTTP代理,可以通过使用以下符号导出Java环境变量 HTTPS_PROXY 来配置设置: my.http.proxy:1234 或者 username:password@my.http.proxy:1234 你还可以使用 环境变量 ( HTTPS_PROXY_USERHTTPS_PROXY_PASS ) 配置用户名和密码。

    已知问题

    一些二进制文件( 用于 Opera 和 Firefox ) 是托管在GitHub上的。 当WebDriverManager发出几个连续请求时,GitHub服务器将返回一个收费的HTTP错误响应如下:

    
    Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://api.github.com/repos/operasoftware/operachromiumdriver/releases
    
    
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1840)
    
    
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)
    
    
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    
    
     at io.github.bonigarcia.wdm.BrowserManager.openGitHubConnection(BrowserManager.java:463)
    
    
     at io.github.bonigarcia.wdm.OperaDriverManager.getDrivers(OperaDriverManager.java:55)
    
    
     at io.github.bonigarcia.wdm.BrowserManager.manage(BrowserManager.java:168)
    
    
    
    
    
    Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://api.github.com/repos/mozilla/geckodriver/releases
    
    
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1840)
    
    
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)
    
    
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    
    
     at io.github.bonigarcia.wdm.FirefoxDriverManager.getDrivers(FirefoxDriverManager.java:61)
    
    
     at io.github.bonigarcia.wdm.BrowserManager.manage(BrowserManager.java:163)
    
    
    
    

    为了避免这个问题,应该对认证请求进行验证。 过程如下:

    • 创建一个令牌/秘密对在你的GitHub帐户
    • 告诉WebDriverManager这里对标记/密钥的值。 为此,你应该使用配置键 wdm.gitHubTokenNamewdm.gitHubTokenSecret。 你可以将它们作为 命令行 Java参数传递,如下所示:
    -Dwdm.gitHubTokenName=<your-token-name>
    -Dwdm.gitHubTokenSecret=<your-token-secret>

    帮助

    如果你对如何使用特殊配置或者某种特殊配置有疑问,请考虑询问关于 stackoverflow的问题,并使用 WebDriverManager java 标签它。

    WebDriverManager ( 版权所有 © 2015 -2018 ) 是由 Boni Garcia创建的项目,并根据许可协议许可协议licensed许可。 评论,问题和建议始终是非常受欢迎的欢迎。


    WEB  JAVA  MAN  AUTO  BIN  Runtime  
    相关文章