Java 与Guice和TestNg并行运行测试

Java 与Guice和TestNg并行运行测试,java,testng,guice,Java,Testng,Guice,问题来了。我有一个网站的一些用户界面测试。我使用NavigationService在页面上进行一些导航,例如打开一些页面等 这里是导航模块 public class NavigationModule extends AbstractModule { @Override protected void configure() { bind(NavigationService.class).in(Singleton.class); } public class NavigationServ

问题来了。我有一个网站的一些用户界面测试。我使用NavigationService在页面上进行一些导航,例如打开一些页面等

这里是导航模块

public class NavigationModule extends AbstractModule {

@Override
protected void configure() {
    bind(NavigationService.class).in(Singleton.class);
}
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;
}}
}

这里是导航服务

public class NavigationModule extends AbstractModule {

@Override
protected void configure() {
    bind(NavigationService.class).in(Singleton.class);
}
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;
}}
所有这些我都在带有@Guice注释的BaseTest类中使用它,下面是代码

@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并行运行它,它打开一个登录的浏览器,然后打开另一个没有打开页面的浏览器,然后抛出

未找到元素{By.xpath://div[@id='toast-container']}


NavigationModule绑定在Singleton中,正如我所了解的,我们应该为每个线程创建不同的Singleton,有什么方法可以做到这一点吗?

Ohhh,几周后,我们终于做到了。因此,解决方案。享受;)

不存在“不同的单例”,单例定义为整个应用程序共享的单个实例。你可能需要一个本地线程,但我不知道你正在使用的这个前端技术,所以我恐怕帮不了什么忙……是的,你说得对。问题是,两个线程使用相同的单例,我知道我们需要线程本地,但我找不到任何好的例子给我。。。