用于在BrowserStack中的不同浏览器上运行JUnit Suite的配置文件

时间:2014-03-20 12:00:44

标签: java selenium configuration junit suite

请你看看我的问题并给出解决方案的任何建议。 我使用JUnit4和selenium 2 WebDriver。 所以,我有运行JUnit套件的类:

@RunWith(Suite.class)
@Suite.SuiteClasses({className1.class, clasName2.class})
public class TestSuite
{
  public static TestSuite suite()
  {
      TestSuite suite = new TestSuite();
      suite.addTest(new JUnit4TestAdapter(className1.class));
      suite.addTest(new JUnit4TestAdapter(className2.class));

      return suite;
   }
}

每个类都包含@Test方法并扩展BaseClass,它在@BeforeClass参数中设置(通过DesiredCapabilities)在BrowserStack机器上运行套件:

public class MyTestBase{
    static protected WebDriver driver;
private boolean acceptNextAlert = true;
protected static StringBuffer verificationErrors = new StringBuffer();

    @BeforeClass
    public static void setUp() throws Exception {
            DesiredCapabilities capability = DesiredCapabilities.firefox();
    capability.setPlatform(Platform.WINDOWS);
    capability.setCapability("build", "JUnit - Sample");
    capability.setCapability("acceptSslCerts", "true");
    capability.setCapability("browserstack.debug", "true");
    driver = new RemoteWebDriver(
        new URL("http://username:accesskey@hub.browserstack.com/wd/hub"),
        capability);
        driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
    }
    /* other code */
}

那么,请你帮我解决下一个问题: 1)我需要创建配置文件并使用其参数在BrowserStack中的不同浏览器上运行我的TestSuite。任何.xml文件的例子都可以理解。 2)我还需要如何修改我的TestSuite.class以使用.xml文件参数。 3)我的TestSuite.class由许多.class和@Test方法组成。每个类都扩展了注释@BeforeClass和@AfterClass所在的MyTestBase.class,但是当我运行TestSuite时,已经为TestSuite中的每个类启动了新的浏览器,对我来说这是一个非常大的问题。对于TestSuite中所有类的所有@Test方法,我可以做一次运行浏览器。我知道@BeforeClass适用于一个类中的所有@Test方法,但如果有类可以做什么呢?在TestNG中,有@BeforeSuite解决了这个问题 对不起,对于这么多问题,但我已经尝试了很多但没有成功:( 非常感谢!

1 个答案:

答案 0 :(得分:0)

你问了很多关于不同主题的问题。我会尽力解决问题。

重用浏览器而不是为每个测试类打开一个新的

只有在实例化WebDriver一次并在所有测试中使用该对象时,才能实现此目的。因此,请不要在测试的@BeforeClass方法中实例化浏览器。

如何初始化WebDriver

在测试套件的第一个测试类中。这可能只是打开浏览器的专用测试。或者您可以在所有测试中包含此功能,并且必须检查浏览器是否已经初始化。

如何重用WebDriver对象并在测试类之间共享?

我建议创建一个存储WebDriver对象的Singleton。这样所有测试都可以访问它。但是,如果您并行运行测试,则需要花费更多精力才能使此线程安全。

使用不同的浏览器运行测试

您应该进行测试@Parameterized并期望将一组WebDriver个对象作为参数来执行。

结合两者:不同的浏览器和测试之间重用浏览器

这可能会导致您希望为测试套件定义参数。但是,在标准JUnit 4中,您无法执行此操作。 我建议您使用this library中的ParameterizedSuite转轮。