Как настроить дрон Arquillian для одновременного использования нескольких браузеров? - PullRequest
0 голосов
/ 29 августа 2018

Я следовал Несколько браузеров Arquillian и ниже - настройка

Arquillian.xml

<extension qualifier="webdriver-browser1">
    <property name="browser">firefox</property>
</extension>
<extension qualifier="webdriver-browser2">
    <property name="browser">chrome</property>
</extension>
<extension qualifier="graphene">
    <property name="url">http://localhost:3000</property>
    <property name="waitGuiInterval">6</property>
</extension>

Аннотация:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Qualifier
public @interface Browser1 {
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Qualifier
public @interface Browser1 {
}

В тестовом файле

@Browser1
@Drone
WebDriver browser1;

@Browser2
@Drone
WebDriver browser2;

Тогда я использую приведенный ниже код для открытия браузеров

browser1.get(url.toString());
browser2.get(url.toString());

Браузеры открываются, но выбрасывается исключение:

java.lang.IllegalStateException: в браузере чередуется org.jboss.arquillian.drone.api.annotation.Default и com.poc.testing.cusat.Browser1.

1 Ответ

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

Использование Selenium Grid может решить вашу проблему. Это пошаговое руководство о том, как его использовать: https://www.codementor.io/olawalealadeusi896/setting-up-selenium-grid-to-run-your-tests-in-parallel-on-multiple-browsers-kl6vqi83a

Цитата С сайта:

ШАГ 1 Загрузите автономный сервер selenium и поместите его в любой каталог на тестовом компьютере, позвольте позвонить нашему тестовому компьютеру Machine A. [...] запишите IP-адрес вашего тестового компьютера (Machine A).

ШАГ 2 [..] Откройте терминал или командную строку, если вы используете Windows OS, и перейдите в каталог, где вы сохранили автономный сервер selenium, загруженный в STEP 1. Затем выполните следующую команду

java -jar <selenium_standalone_server_file_name_here> -role hub -host <your_ip_here>

Примечания:

  • Замените на имя вашего файла автономного сервера selenium - обычно это в следующем формате selenium-server-standalone-3.5.0.jar (это для версии 3.5.0). Если вы не запускаете команду из каталога, в котором вы сохранили отдельный сервер selenium, замените путь к файлу selenium

  • Замените на ваш IP-адрес. Помните, я попросил вас сохранить IP-адрес где-то в ШАГЕ 1, вы тот же IP-адрес здесь.

  • Мы сообщаем автономному серверу selenium, что это наш концентратор, передавая концентратор команде -role

[...]

Примечание: скопируйте этот URL-адрес http://:4444/grid/register/ и сохраните его где-нибудь, он нам понадобится для регистрации узла в этом хабе, который мы только что начали. Чтобы проверить, работает ли концентратор - откройте браузер и перейдите к localhost: 4444 / grid / console

ШАГ 3 Вспоминая объяснение узла, мы говорили, что узлы являются экземплярами концентратора, на котором будут выполняться наши тесты, и узел должен быть зарегистрирован на концентраторе. Поскольку наш тест будет выполняться на узле, нам нужно загрузить все драйверы браузера, на которых мы хотим выполнить наш тест. Драйверы браузера специфичны для каждого браузера и являются реализацией веб-драйвера, которая управляет их соответствующими браузерами на локальном компьютере. Они действуют как прокси между локальным и удаленным концами. Загрузите следующее и поместите их в одну и ту же папку на компьютере B - если хотите, вы также можете разместить их в разных местах, но просто отметьте их пути.

  • автономный сервер selenium - сервер jar селена
  • драйвер chrome - реализация Chrome WebDriver, которая управляет браузером Chrome, работающим на локальном компьютере.
  • Драйвер Gecko - Драйвер Gecko - это реализация WebDriver, которая управляет браузером Gecko, например Firefox, работающим на локальном компьютере.
  • Драйвер IE - InternetExplorerDriver - это автономный сервер, который реализует проводной протокол WebDriver, который управляет браузером IE на локальном компьютере

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

Когда вы закончите загрузку драйверов, если ваша вторая машина работает под управлением ОС Windows, вы можете создать папку selenium на диске C и поместить в нее все драйверы.

Откройте командную строку или терминал в зависимости от ситуации на компьютере B и выполните следующие команды, чтобы запустить узел

java -Dwebdriver.chrome.driver="C:\selenium\chromedriver.exe" -Dwebdriver.internetexplorer.driver="C:\selenium\IEDriverServer.exe" -Dwebdriver.gecko.driver="C:\selenium\geckodriver.exe" -jar "C:\selenium\selenium-server-standalone-3.5.0.jar" -role node -hub "http://<your_ip_here>:4444/grid/register/"

Что мы сделали?

  • Предполагается, что вы используете Windows OS, а драйверы находятся в папке selenium внутри драйвера C. Если вы используете другую ОС или у вас есть драйверы в другой папке, отличной от selenium, вы можете изменить путь к соответствующему драйверу из приведенной выше команды.
  • Замените http://:4444/grid/register/ URL-адресом, который я просил вас скопировать в ШАГЕ 2. измените IP-адрес устройства A.
  • Мы сообщаем автономному серверу selenium, что это один из наших узлов, передавая узел команде -role

Примечание. ШАГ 3 должен быть выполнен на виртуальной машине или на второй машине, если вы не используете виртуальную машину. [...]Вы можете проверить конфигурацию машины A, перейдя к http://localhost:4444/grid/console в браузере машины A, то же самое с тем, что мы сделали, когда мы подтвердили в браузере, работает ли концентратор

[...]

Затем создайте новый пакет в / src / main / java / и назовите его base (внутри этого пакета мы создадим класс, который будет настраивать наш тестовый драйвер). Когда вы закончите, создайте класс Java внутри базового пакета и назовите его SetupTestDriver. Добавьте следующий код в класс SetupTestDriver

открытый класс SetupTestDriver {

private WebDriver driver = null;
private String browser = null;
private String baseUrl = null;
private String os = null;
private String node = null;

public SetupTestDriver(String os, String browser, String baseUrl, String node) throws MalformedURLException {
    this.browser = browser;
    this.os = os;
    this.baseUrl = baseUrl;
    this.node = node;

    Platform platform = Platform.fromString(os.toUpperCase());
    if(browser.equalsIgnoreCase("chrome")) {
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setCapability("platform", platform);
        this.driver = new RemoteWebDriver(new URL(node + "/wd/hub"), chromeOptions);
    } else if (browser.equalsIgnoreCase("firefox")) {
        FirefoxOptions firefoxOptions = new FirefoxOptions();
        firefoxOptions.setCapability("platform", platform);
        this.driver = new RemoteWebDriver(new URL(node + "/wd/hub"), firefoxOptions);
    } else {
        InternetExplorerOptions ieOption = new InternetExplorerOptions();
        ieOption.setCapability("platform", platform);
        this.driver = new RemoteWebDriver(new URL(node + "/wd/hub"), ieOption);
    }

    this.driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    this.driver.manage().window().maximize();
    this.driver.get(baseUrl);

}

public String getOs() {
    return this.os;
}

public String getBrowser() {
    return this.browser;
}

public String getBaseUrl() {
    return this.baseUrl;
}

public String getNode() {
    return this.node;
}

public WebDriver getDriver() {
    return this.driver;
}

}

Теперь, когда у нас настроен класс SetupTestDriver, давайте создадим простой Java-тест для проверки окна поиска Google.

создайте новый тестовый класс в src / test / java, мы можем назвать его GoogleSearchTest

Добавьте следующий код к классу

открытый класс GoogleSearchTest {

public WebDriver driver;

@BeforeClass(alwaysRun = true)
@Parameters({"os", "browser", "url", "node"})
public void setUp(String os, String browser, String url, String node) throws MalformedURLException {
    SetupTestDriver setupTestDriver = new SetupTestDriver(os, browser, url, node);
    driver = setupTestDriver.getDriver();
}

@Test
public void googleTitleTest() {
    // validate page title test
    Assert.assertTrue(driver.getTitle().contentEquals("Google"));
}

@Test
public void googleUrlTest() {
    // validate current url test
    Assert.assertTrue(driver.getCurrentUrl().contains("www.google.com"));
}

@Test
public void googleSearchButtonTest() {
    // basic test to validate that search button is displayed, enabled and it's value
    WebElement searchButtonElement = driver.findElement(By.name("btnK"));
    Assert.assertTrue(searchButtonElement.isDisplayed());
    Assert.assertTrue(searchButtonElement.isEnabled());
    Assert.assertTrue(searchButtonElement.getAttribute("value").contains("Google Search"));
}

@Test
public void googleFeelingLuckyButtonTest() {
    // basic test to validate that feeling lucky button is displayed, enabled and it's value
    WebElement feelingLuckyElement = driver.findElement(By.name("btnI"));
    Assert.assertTrue(feelingLuckyElement.isDisplayed());
    Assert.assertTrue(feelingLuckyElement.isEnabled());
    Assert.assertTrue(feelingLuckyElement.getAttribute("value").contains("I'm Feeling Lucky"));
}

@Test
public void googleSearchBox() {
    // basic test to validate that search box displayed and enabled
    WebElement searchElement = driver.findElement(By.name("q"));
    Assert.assertTrue(searchElement.isDisplayed());
    Assert.assertTrue(searchElement.isEnabled());
}



@AfterClass(alwaysRun = true)
public void closeBrowser() {
    driver.quit();
}

}

...