与Guice和TestNg并行运行测试

时间:2017-10-27 07:39:54

标签: java testng guice

这是问题所在。我有一个网站的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中被绑定,我得到的是我们应该为每个线程创建不同的单例,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

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