Есть ли способ сделать gecko.driver доступным для всех в общем коде? - PullRequest
0 голосов
/ 25 июня 2019

Я собираюсь поделиться своим кодом, написанным в фреймворке Selenium / Cucumber, через BitBucket. Я использовал следующее, чтобы сделать код исполняемым в Firefox.

System.setProperty("webdriver.gecko.driver","/Users/firatkaymaz/eclipse-workspace/SeleniumTest/drivers/geckodriver/geckodriver");
driver = new FirefoxDriver();

Как можно выполнить код на другом ПК или ноутбуке, поскольку информация о пути к драйверу Gecko связана с моей локальной машиной? Есть ли способ сделать gecko.driver пригодным для использования тем человеком, который собирается запускать общий код, или ему нужно изменить информацию о пути своими собственными?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Вместо этого вы можете использовать сервер селена

Скачать здесь

Соберите selenium-server-standalone-3.141.59.jar и geckodriver по одному и тому же пути для простоты использования

  1. В командной строке перейдите на свой путь и выполните команду:

java -jar selenium-server-standalone-3.141.59.jar -role hub

В случае успеха вы получите этот журнал:

[Hub.start] - Selenium Grid hub is up and running
[Hub.start] - Nodes should register to http://somethingIP:4444/grid/register/
[Hub.start] - Clients should connect to http://somethingIP:4444/wd/hub
  1. Откройте другую командную строку, затем выполните следующую команду (перейдите по пути):

java -Dwebdriver.gecko.driver=geckodriver -jar selenium-server-standalone-3.141.59.jar -role node -hub http://localhost:4444/grid/register

В случае успеха вы получите этот журнал:

The node is registered to the hub and ready to use

В вашем коде инициализация driver со следующим кодом:

DesiredCapabilities dc = new DesiredCapabilities();
WebDriver driver;

//replace localhost with the real IP if you try to access it from another PC
URL url = new URL("http://localhost:4444/wd/hub");
dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.FIREFOX);

driver = new RemoteWebDriver(url, dc);

С документацией можно ознакомиться здесь

0 голосов
/ 25 июня 2019

У вас есть несколько вариантов:

Установите соответствующие переменные среды

Не используйте System.setProperty для установки webdriver.gecko.driver. Это должно быть установлено как переменная окружения на машине, а не в коде. Это позволяет вам настроить несколько машин / блоков сборки с драйвером gecko в нескольких местах. Каждой машине нужно просто установить переменную окружения webdriver.gecko.driver, чтобы указать на соответствующий путь на локальной машине, и она "просто будет работать".

Использование драйвера двоичного загрузчика maven plugin

Это позволит вашему проекту Maven автоматически загружать двоичные файлы драйверов, как указано в соответствующем RepositoryMap.xml (очевидно, вам необходимо использовать Maven для управления сборкой / зависимостями). Если вы не определили один, он загрузит набор двоичных файлов по умолчанию (но они могут быть устаревшими). Подробнее Смотрите здесь .

<plugins>
    <plugin>
        <groupId>com.lazerycode.selenium</groupId>
        <artifactId>driver-binary-downloader-maven-plugin</artifactId>
        <version>1.0.17</version>
        <configuration>
            <!-- root directory that downloaded driver binaries will be stored in -->
            <rootStandaloneServerDirectory>/my/location/binaries</rootStandaloneServerDirectory>
            <!-- Where you want to store downloaded zip files -->
            <downloadedZipFileDirectory>/my/location/zips</downloadedZipFileDirectory>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>selenium</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

К сожалению, хотя при этом загружаются двоичные файлы, Maven не передает переменные окружения между различными JVM, которые он запускает для разных фаз. Поэтому вам нужно будет передать некоторую конфигурацию в вашу тестовую конфигурацию, например:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <systemPropertyVariables>
            <!--Set properties passed in by the driver binary downloader-->
            <webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver>
            <webdriver.ie.driver>${webdriver.ie.driver}</webdriver.ie.driver>
            <webdriver.opera.driver>${webdriver.opera.driver}</webdriver.opera.driver>
            <webdriver.gecko.driver>${webdriver.gecko.driver}</webdriver.gecko.driver>
            <webdriver.edge.driver>${webdriver.edge.driver}</webdriver.edge.driver>
        </systemPropertyVariables>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <!--This goal makes the build fail if you have test failures-->
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Полный рабочий пример см. Здесь .

Использование Webdriver Manager

Это позволит вам загружать и настраивать двоичные файлы драйверов с использованием кода Java. Вы можете указать конкретные версии, используя файл versions.properties:

public class ChromeTest {

    private WebDriver driver;

    @BeforeClass
    public static void setupClass() {
        WebDriverManager.chromedriver().setup();
    }

    @Before
    public void setupTest() {
        driver = new ChromeDriver();
    }

    @After
    public void teardown() {
        if (driver != null) {
            driver.quit();
        }
    }

    @Test
    public void test() {
        // Your test code here
    }

}

Для получения дополнительной информации См. Здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...