在 build.gradle 中为 Selenium 测试程序定义 WebDriver 路径,而不是以编程方式设置系统属性

Posted

技术标签:

【中文标题】在 build.gradle 中为 Selenium 测试程序定义 WebDriver 路径,而不是以编程方式设置系统属性【英文标题】:Define WebDriver path in build.gradle for Selenium test programs rather than setting System Property programmatically 【发布时间】:2017-11-04 10:06:48 【问题描述】:

对于我的 Selenium 测试程序,我一直在通过设置系统属性来定义 webdriver 可执行文件的绝对路径。

例如——

System.setProperty("webdriver.edge.driver",
                    new File("webdrivers/MicrosoftWebDriver.exe").getAbsolutePath());

System.setProperty("webdriver.chrome.driver",
                    new File("webdrivers/chromedriver.exe").getAbsolutePath());

这种方法完美无缺。但是,对于每个开发环境,我都必须下载 webdrivers,将它们放在一个文件夹中,然后通过设置系统属性来引用它们,如上所示。

我不喜欢这种方法,所以我在网上研究了更聪明的方法。然后我在 maven 存储库中找到了一些库,并通过 build.gradle 文件将它们添加到。

dependencies 
    compile group: 'org.seleniumhq.selenium', name: 'selenium-firefox-driver', version: '3.4.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.4.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-ie-driver', version: '3.4.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-safari-driver', version: '3.4.0'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-edge-driver', version: '3.4.0'

当我添加这些依赖项时,我不应该期望程序能神奇地工作,对吧?因为那行不通。

有一个存储库here,开发人员试图在其中实现我想为我的项目实现的一些东西。我尝试了他的方法,但失败了。我的程序无法找到合适的驱动程序。

名为WebDriverManager 的项目看起来很吸引人,但仅适用于 Chrome 和 Internet Explorer。我在使用这个库时遇到了 Firefox 和 Opera 的问题,而我在通过手动下载驱动程序和设置系统属性方法时没有遇到这些问题。

好的,我现在将我的问题分解为两个问题 -

1) 如果我使用之前展示的依赖项,我将如何修改我的 build.gradle 文件,这样我就不必设置系统属性并以编程方式指向 webdrivers .exe 文件?

2) 如果我不使用这些依赖项,我可以让 gradle 来完成为所有浏览器下载 webdrivers 的工作,将它们放在一个文件夹中,并设置所有必需的系统属性吗?

提前致谢。

【问题讨论】:

【参考方案1】:

1) 我让 Gradle 将系统属性设置为当前 webdriver 文件的位置。我在测试中需要它们,所以我在测试任务之前设置了属性。

test.doFirst
    def classpathRoots = project.sourceSets.test.runtimeClasspath.files
    systemProperty 'webdriver.gecko.driver', classpathRoots.find  it.name.startsWith('geckodriver') 
    systemProperty 'webdriver.chrome.driver', classpathRoots.find  it.name.startsWith('chromedriver') 
    systemProperty 'webdriver.edge.driver', classpathRoots.find  it.name.startsWith('microsoftwebdriver') 

【讨论】:

以上是关于在 build.gradle 中为 Selenium 测试程序定义 WebDriver 路径,而不是以编程方式设置系统属性的主要内容,如果未能解决你的问题,请参考以下文章

在 build.gradle 中为 Selenium 测试程序定义 WebDriver 路径,而不是以编程方式设置系统属性

如何在intelliJ IDEA中为我现有的Kotlin项目生成build.gradle文件

将 maven 存储库添加到 build.gradle

每个变体的 Android Gradle 自定义任务

为啥 minifyEnabled 在默认情况下在发布版本中为 false?

在 AS 中为新项目设置 SDK 版本