在使用 Spring 使用 testNG(Selenium) 进行 运行 测试时无法维持两个并行会话?

Unable to maintain two parallel sessions while running tests using testNG(Selenium) using Spring?

我在使用 Spring 框架使用 TestNG 和 Selenium 进行 运行 简单测试时遇到问题,问题是它无法启动两个并行会话(没有并行它工作正常没有任何问题) . 整体 objective 是启动两个并行浏览器,每个会话由 springIOC 管理。没有 Spring 使用静态 threadLocal 很容易做到,但是使用 spring 我想维护两个由 spring 本身管理的独立 IOC 容器。

请帮我解决这个问题。代码可在下方 link, 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);
    }

}

所有 Page 对象都是 spring 带有 WebDriver(自动装配)的组件。

您的代码库中存在一些阻止并发支持的问题。

  1. autowired WebDriver 实例的范围应该定义为 prototype 而不是 singleton (这是默认范围)。这样每个页面对象基本上都会获得自己的 WebDriver 实例。虽然当您的 @Test 方法跨越多个页面时,这在某种程度上有点复杂。
  2. 如果您要使用原型范围的 webdriver,您处理 post 处理(其中您正在初始化页面工厂)的方式也必须更改,因为您现在负担不起在那里自动装配网络驱动程序,但现在必须从页面对象中提取它 class.

为了以更易于理解的方式解释更改,我已针对您的存储库提出拉取请求。

参考https://github.com/priyankshah217/AutomationFrameworkUsingSpringDI/pull/2

完整的更改集。