Создание Системы.методов-setproperty независимым от платформы в Maven-проекта для тестов Selenium


В настоящее время я создаю selenium automation с помощью webdriver в Maven с использованием Java. Теперь для инициализации браузеров, таких как Chrome и IE, я должен установить системное свойство, такое как

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

Теперь, мой результат в терминах JAR. Я использую maven, поэтому в настоящее время это находится в разделе main>resources>drivers>chromedriver.exe

Так что после пакета это будет unders root > drivers>chromedriver.exe

Итак, как сделать системное свойство, чтобы оно выполнялось в обоих дела?

Я исследовал некоторые константы, такие как java.class.path или java.file.seperator и т. д. но я не уверен, насколько они пригодятся здесь в данном случае. Я надеюсь, что кто-нибудь сможет мне помочь.
1 2

1 ответ:

Я бы предложил взглянуть на это:

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
Это покажет вам все, что работает, и даст вам хорошую базу для начала.