有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

在使用Spring框架使用TestNG和Selenium运行简单测试时,我遇到了一个问题,问题是它无法启动两个并行会话(如果没有并行会话,它的工作将很好,没有任何问题)。 总体目标是启动两个并行浏览器,每个会话由springIOC管理。没有Spring,使用静态threadLocal很容易,但是有了Spring,我想维护由Spring自己管理的两个独立的IOC容器

请帮我解决这个问题。代码可在以下链接中找到, https://github.com/priyankshah217/AutomationFrameworkUsingSpringDI.git

testNg。xml

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

TestConfig。爪哇

@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;
  }
}

基本测试。爪哇

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

    @Autowired
    private WebDriver webDriver;

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

谷歌主页。爪哇

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

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

}

所有页面对象都是带有WebDriver(自动连线)的spring组件


共 (1) 个答案

  1. # 1 楼答案

    您的代码库中有一些问题妨碍了并发支持

    1. autowiredWebDriver实例的作用域应定义为prototype,而不是singleton(默认作用域)。这样,每个页面对象基本上都会获得自己的WebDriver实例。当@Test方法跨越多个页面时,这在某种程度上有点复杂
    2. 如果要使用原型范围的webdriver,那么处理后期处理(初始化页面工厂)的方式也必须改变,因为您现在无法在其中自动连接webdriver,但现在必须从页面对象类中提取它

    为了以更容易理解的方式解释这些更改,我对您的存储库提出了一个请求

    请参阅https://github.com/priyankshah217/AutomationFrameworkUsingSpringDI/pull/2

    对于全套更改