Как настроить URL-адрес удаленной сетки Selenide в тестовой среде Selenium-Jupiter? - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь настроить драйвер Selenide в структуре Selenium-Jupiter, чтобы использовать мой URL удаленной сетки, но он продолжает игнорировать конфигурацию и просто запускает локально установленный браузер. Вот как я пытаюсь это настроить. Любая идея, что здесь может быть не так?

import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.SelenideConfig;
import io.github.bonigarcia.seljup.SelenideConfiguration;
import static com.codeborne.selenide.Browsers.CHROME;

public abstract class ChromeTest extends BaseTest {

    @SelenideConfiguration
    SelenideConfig selenideConfig = new SelenideConfig();

    private String getSeleniumRemote() {
        System.getProperty("selenide.remote", "");
    }

    public ChromeTest() {
        if (getSelenideRemote().isEmpty()) {
            selenideConfig.proxyEnabled(false)
                .browser(CHROME).startMaximized(false)
                .browserSize("800x1200").browserPosition("50x60");
        } else {
            Configuration.timeout = 6000;
            Configuration.remote = getSelenideRemote();
            selenideConfig.proxyEnabled(false)
                .startMaximized(true).browser(CHROME);
        }
    }

}

Я знаю, что обычный RemoteWebDriver работает, и я могу заставить его работать, но я надеюсь использовать Selenide в приведенном выше примере:

Пример:

@Test
void testWithRemoteSelenide(@DriverUrl("http://127.1:4444/wd/hub") 
  @DriverCapabilities("browserName=" + CHROME) SelenideDriver driver)

Я могу заставить его работать с аннотацией, но проблема в том, что мне нужно, чтобы эта аннотация была условной при передаче параметра в тесты. Я хочу иметь возможность легко переключаться с использованием сетки или локальных. Спасибо всем за помощь.

1 Ответ

0 голосов
/ 29 марта 2020

Хорошо, после почти 48 часов без ответа я наконец-то нашел решение. Вот оно:

//build.gradle
test {
    useJUnitPlatform()
    ignoreFailures = false
    beforeTest { descriptor ->
        logger.lifecycle("Running test: $descriptor.className")
    }
    systemProperty "env", System.getProperty("env")
    def remote = System.getProperty("selenide.remote", "")
    if (!remote.isEmpty()) {
        systemProperty("selenide.remote", remote)
    }
}

Затем в моем тестовом базовом классе:

public abstract class ChromeTest extends BaseTest {
    @SelenideConfiguration
    SelenideConfig selenideConfig = new SelenideConfig();
    /**
     * This config is equivilant to the documented method:
     * Example: test(@DriverUrl("http://127.1:4444/wd/hub") 
     *   @DriverCapabilities("browserName=chrome") SelenideDriver sd)
     */
    public ChromeFormTest() {
      if (getSelenideRemote().isEmpty()) {
         selenideConfig.proxyEnabled(false).proxyHost("http://proxy.domain.com")
            .proxyPort(8080)
            .browser(CHROME).startMaximized(false)
            .browserSize("800x1200").browserPosition("50x60");

      } else {
          Configuration.timeout = 6000;
          Configuration.remote = getSelenideRemote();
          selenideConfig.proxyEnabled(false).proxyHost("http://proxy.domain.com")
             .proxyPort(8080)
             .startMaximized(false).browser(CHROME);
        }
    }
}

Затем, когда я выполняю, это выглядит так:

gradle clean test -Denv=sys -Dselenide.remote=http://127.1:4444/wd/hub 
  --info --tests com.qa.suite.*

И конструктор каждого теста выглядит так:

@Test
public void testWhatever(SelenideDriver sd) {
...