运行 与 Guice 和 TestNg 并行测试

Run tests in parallel with Guice and TestNg

问题来了。我对一个网站进行了一些 UI 测试。我使用 NavigationService 在页面上做一些导航,比如打开一些页面等

这里是 NavigationModule

public class NavigationModule extends AbstractModule {

@Override
protected void configure() {
    bind(NavigationService.class).in(Singleton.class);
}

}

这里是NavigationService

public class NavigationService {

@Inject
private LoginPage loginPage;
@Inject
private TemplateManagementPage templateManagementPage;
@Inject
private CreateTemplatePage createTemplatePage;
@Inject
private NavigationMenu navigationMenu;

public TemplateManagementPage logIn(String username, String password) {
    return loginPage.login(username, password);
}

public TemplateManagementPage openTemplateManagementPage() {
    navigationMenu.openMenu()
    return templateManagementPage;
}}

以上所有我在BaseTest class中使用@Guice注释,这里是代码

@Guice(modules = NavigationModule.class)
public abstract class BaseTest extends BDDTest {

 protected String login = "login";
 protected String password = "pass";

 @Inject
 protected NavigationService navigationService;

 protected TemplateManagementPage templateManagementPage;

 @BeforeSuite
 public void login() {
     templateManagementPage = navigationService.logIn(login, password);
 }}

最后一件事是我在@BeforeMethod

中调用了这个方法
public class TemplateWithLevelTest extends BaseTest {

private CreateTemplatePage templatePage;

@BeforeMethod(description = "Open create template page")
public void openCreateTemplatePage() {
    templatePage = navigationService.openCreateTemplatePage();
}

@Test()
public void someTest() {
    ...
}

一切正常,直到我想要 运行 它与 TestNg.xml 并行,它打开一个浏览器登录,然后打开另一个没有打开页面的浏览器,然后它抛出

Element not found {By.xpath: //div[@id='toast-container']}

NavigationModule 绑定在 Singleton 中,据我所知我们应该为每个线程创建不同的 singletons,有什么办法可以做到吗?

哦哦,几周后,我们终于做到了。所以here's解决方案。享受;)