这是问题所在。我有一个网站的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类中使用@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并行运行它,它会打开一个登录的浏览器,然后打开另一个没有打开页面的浏览器,然后抛出
未找到元素{By.xpath:// div [@id =' toast-container']}
NavigationModule在Singleton中被绑定,我得到的是我们应该为每个线程创建不同的单例,有没有办法做到这一点?