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 楼答案
您的代码库中有一些问题妨碍了并发支持
autowired
WebDriver
实例的作用域应定义为prototype
,而不是singleton
(默认作用域)。这样,每个页面对象基本上都会获得自己的WebDriver实例。当@Test
方法跨越多个页面时,这在某种程度上有点复杂李>为了以更容易理解的方式解释这些更改,我对您的存储库提出了一个请求
请参阅https://github.com/priyankshah217/AutomationFrameworkUsingSpringDI/pull/2
对于全套更改