Невозможно поддерживать два параллельных сеанса при выполнении тестов с использованием testNG (Selenium) с использованием Spring? - PullRequest
0 голосов
/ 19 июня 2020

Я столкнулся с проблемой при запуске простых тестов с использованием TestNG с Selenium с использованием Spring framework, проблема в том, что он не может запустить два параллельных сеанса (без параллельной работы он отлично работает без каких-либо проблем). Общая цель - запустить два параллельных браузера и каждый сеанс, управляемый springIO C. Без Spring это легко сделать с помощью stati c threadLocal, но с Spring я хочу поддерживать два отдельных контейнера IO C, управляемых самой Spring.

Пожалуйста, помогите мне решить эту проблему. Код доступен по ссылке ниже: https://github.com/priyankshah217/AutomationFrameworkUsingSpringDI.git

testNg. xml

<test name="search-engine-test">
    <classes>
        <class name="com.test.framework.tests.TestAmazonWeb"/>
    </classes>
</test>

TestConfig. java

@Configuration
@ComponentScan("com.test.framework")
public class TestConfig {

  WebDriver webDriver;

  @Bean
  public WebDriver getDriver() {
    if (webDriver == null || ((ChromeDriver) webDriver).getSessionId() == null) {
      webDriver = new ChromeDriver();
    }
    return webDriver;
  }
}

BaseTest. java

@ContextConfiguration(classes = {TestConfig.class})
public class BaseTest extends AbstractTestNGSpringContextTests {

    @Autowired
    private WebDriver webDriver;

    @AfterMethod
    public void tearDown() {
        webDriver.quit();
    }
}

GoogleHomePage. java

@PageObject
public class GoogleHomePage extends BasePage {
    @FindBy(name = "q")
    private WebElement searchTextbox;

    public void enterGoogleSearch() {
        hardWait();
        searchTextbox.sendKeys("Selenium");
        searchTextbox.sendKeys(Keys.RETURN);
    }

}

Все объекты страницы Компонент spring с WebDriver (с автоматическим подключением)

1 Ответ

1 голос
/ 20 июня 2020

В вашей кодовой базе было несколько проблем, которые препятствуют поддержке параллелизма.

  1. Экземпляр autowired WebDriver должен был быть определен с областью действия как prototype вместо singleton ( что является областью действия по умолчанию). Таким образом, каждый объект страницы получит собственный экземпляр WebDriver. Это в некотором смысле запутанный подход, хотя, когда ваш метод @Test охватывает несколько страниц.
  2. Способ, которым вы выполняли пост-обработку (при которой вы инициализируете фабрику страниц), также должен можно изменить, если вы собираетесь работать с веб-драйвером с областью действия прототипа, потому что теперь вы не можете позволить себе автоматическое подключение веб-драйвера к нему, но теперь его нужно извлечь из класса объекта страницы.
* 1013 объясните изменения более простым для понимания способом, я поднял запрос на перенос для вашего репозитория.

Полный набор см. в https://github.com/priyankshah217/AutomationFrameworkUsingSpringDI/pull/2

изменения.

...