Как программно настроить WebDriver в базовом классе в Selenium Jupiter? - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу перенести существующие тесты Selenium на основе JUnit 4 в JUnit 5. Для этой цели я хочу использовать Selenium-Jupiter .

Одно требование:тесты должны выполнить, чтобы иметь возможность переключать реализацию WebDriver во время выполнения - в зависимости от среды выполнения - используя один общий базовый класс для всех тестов :

  • При выполнении на компьютере разработчика (Windows 10) следует использовать FirefoxDriver, запуская локально установленный Firefox.
  • В среде CI (CentOS 7) следует использовать RemoteWebDriver, делегируя выполнение тестак сетке Selenium

Я уже пытался настроить «Универсальный WebDriver» в соответствии с документацией , но я не знаю, как этого добиться для RemoteWebDriver («Пример 2»)."должно прояснить ситуацию).

Что касается контента , то эта публикация stackoverflow довольно связана , но не дает удовлетворительного ответа.

ОБНОВЛЕНИЕ: Я решил проблему самостоятельно.Смотрите "Пример 3" ...

Привет Boni , может быть, вы хотите немного обновить документацию по Selenium Jupiter.По крайней мере, у меня были некоторые проблемы, выяснить это ... о, и большое спасибо за отличную работу, которую вы проделали с Selenium Jupiter (и лежащим в основе WebDriverManger).

Пример 1: Что работает, но не элегантно

@ExtendWith(SeleniumExtension.class)
class MyTest {

  @EnabledIfSystemProperty(named = "os.name", matches = "Windows 10")
  @Test
  void test_executed_with_local_firefox(FirefoxDriver ffDriver) {
     executeTestCaseWith(ffDriver);
  }

  @EnabledIfSystemProperty(named = "os.name", matches = "Linux")
  @Test
  void test_executed_with_firefox_from_selenium_grid(@DriverUrl("http://...") RemoteWebDriver remoteDriver) {
     executeTestCaseWith(remoteDriver);
  }

  void executeTestCaseWith(WebDriver webDriver) {
     webDriver.get(...)
     Assert(...)
  }
}

Проблемы, которые я вижу хи:

  1. Довольно многословно (tho 'это может быть выполнено с помощью пользовательских аннотаций)
  2. Для каждого класса тестирования требуется два @ метода тестирования для одного логического / семантического теста
  3. КонкретныйПредоставляется реализация WebDriver, что позволяет авторам тестов полагаться на детали реализации WebDriver (например, профили Firefox)

Пример 2. Что я хотел бы сделать, но не работаетпока что

Базовый класс, который конфигурирует WebDriver:

abstract class UiTest {

   @RegisterExtension
   static SeleniumExtension seleniumExtension = new SeleniumExtension();     

   @BeforeAll
   static void setUpOnce() {

     // This check is not the problem discussed here
     boolean isRunningInCiEnvironment = ...
     Browser firefox;

      if( ! isRunningInCiEnvironment ) {
        // This works
        firefox = BrowserBuilder.firefox().build();
      } else {
        // this does not exist yet!
        //firefox = BrowserBuilder.remoteWebDriver().url("http://...").build();

        // This executes, but does not behave as expected
        // The URL is pretty much ignored.
        firefox = BrowserBuilder.firefox().url("http://...").build();
      }

     seleniumExtension.addBrowsers(firefox);
   }       
}

В этом тесте мне нужно будет только выполнить sth.вот так.

class MyTest extends UiTest {

  @Test
  void my_one_logic_test_case(WebDriver webDriver) {

     webDriver.get(...)
     Assert(...)        
  }
}

Обратите внимание, что тип параметра - только WebDriver!

Пример 3: Мое текущее решение

abstract class UiTest {

   @RegisterExtension
   static SeleniumExtension seleniumExtension = new SeleniumExtension();     

   @BeforeAll
   static void setUpOnce() {

     // This check is not the problem discussed here
     boolean isRunningInCiEnvironment = ...

      if( isRunningInCiEnvironment ) {
        // This is doing the trick!
        seleniumExtension.getConfig().setSeleniumServerUrl("http://...");
      }

     seleniumExtension.addBrowsers( BrowserBuilder.firefox().build() );
   }       
}

Теперь можно выполнить конкретный тест, как показано в «Примере 2».

...