使 System.setProperty 平台独立于 Maven 项目中以进行 Selenium 测试

2024-02-27

我目前正在使用 Java 在 Maven 中使用 webdriver 创建 selenium 自动化。 现在为了初始化 Chrome 和 IE 等浏览器,我必须设置系统属性,例如

System.setProperty("webdriver.chrome.driver", "F:\\somewhereintheworkingdir\\drivers\chromedriver.exe");

现在,我的交付成果是 JAR 形式的。我正在使用 Maven,因此当前位于 main>resources>drivers>chromedriver.exe 下

所以打包后它将位于 root>drivers>chromedriver.exe 下

那么如何使系统属性在这两种情况下都运行呢?

我研究了一些常数,例如java.class.path or java.file.seperator等等,但我不确定它们在这种情况下有何用处。

我希望有一个人可以帮助我。


我建议看看这个:

https://github.com/Ardesco/Selenium-Maven-Template https://github.com/Ardesco/Selenium-Maven-Template

相关部分是使用此插件的 POM:

<properties>
    <standalone.binary.root.folder>${project.basedir}/selenium_standalone_binaries</standalone.binary.root.folder>
</properties>

<profiles>
    <profile>
        <id>selenium-tests</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>com.lazerycode.selenium</groupId>
                    <artifactId>driver-binary-downloader-maven-plugin</artifactId>
                    <version>0.9.2</version>
                    <configuration>
                        <rootStandaloneServerDirectory>${standalone.binary.root.folder}</rootStandaloneServerDirectory>
                        <downloadedZipFileDirectory>${project.basedir}/selenium_standalone_zips</downloadedZipFileDirectory>
                        <customRepositoryMap>${project.basedir}/RepositoryMap.xml</customRepositoryMap>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>selenium</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

并在基类中提取二进制文件的位置:

private static ResourceBundle _prop = ResourceBundle.getBundle("dev");
//Load standalone executable if required
switch (browserType) {
    case CHROME:
        if (System.getProperties().getProperty("os.arch").toLowerCase().equals("x86_64") || System.getProperties().getProperty("os.arch").toLowerCase().equals("amd64")) {
            if (System.getProperties().getProperty("os.name").toLowerCase().contains("windows")) {
                System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/windows/googlechrome/64bit/26/chromedriver.exe");
            } else if (System.getProperties().getProperty("os.name").toLowerCase().contains("mac")) {
                System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/osx/googlechrome/64bit/26/chromedriver");
            } else if (System.getProperties().getProperty("os.name").toLowerCase().contains("linux")) {
                System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/linux/googlechrome/64bit/26/chromedriver");
            }
        } else {
            if (System.getProperties().getProperty("os.name").toLowerCase().contains("windows")) {
                System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/windows/googlechrome/32bit/26/chromedriver.exe");
            } else if (System.getProperties().getProperty("os.name").toLowerCase().contains("mac")) {
                System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/osx/googlechrome/32bit/26/chromedriver");
            } else if (System.getProperties().getProperty("os.name").toLowerCase().contains("linux")) {
                System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/linux/googlechrome/32bit/26/chromedriver");
            }
        }
        break;
    case IE:
        if (System.getProperties().getProperty("os.arch").toLowerCase().equals("x86_64") || System.getProperties().getProperty("os.arch").toLowerCase().equals("amd64")) {
            System.setProperty("webdriver.ie.driver", _prop.getString("binaryRootFolder") + "/windows/internetexplorer/64bit/2.29.0/IEDriverServer.exe");
        } else {
            System.setProperty("webdriver.ie.driver", _prop.getString("binaryRootFolder") + "/windows/internetexplorer/32bit/2.29.0/IEDriverServer.exe");
        }
        break;
}

您还需要在 src/main/resources 中拥有一个属性文件(必须位于 main 中,而不是 test 中),maven 可以在构建时更新该文件以传入命令行上 POM/overridden 中设置的属性。

该文件看起来像这样:

binaryRootFolder=${standalone.binary.root.folder}

最简单的方法是克隆本答案开头链接的项目并运行:

mvn verify -Pselenium-tests

这将向您展示一切正常工作,并为您提供良好的起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 System.setProperty 平台独立于 Maven 项目中以进行 Selenium 测试 的相关文章

随机推荐