请你看看我的问题并给出解决方案的任何建议。 我使用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解决了这个问题 对不起,对于这么多问题,但我已经尝试了很多但没有成功:( 非常感谢!
答案 0 :(得分:0)
你问了很多关于不同主题的问题。我会尽力解决问题。
只有在实例化WebDriver
一次并在所有测试中使用该对象时,才能实现此目的。因此,请不要在测试的@BeforeClass
方法中实例化浏览器。
WebDriver
?在测试套件的第一个测试类中。这可能只是打开浏览器的专用测试。或者您可以在所有测试中包含此功能,并且必须检查浏览器是否已经初始化。
WebDriver
对象并在测试类之间共享?我建议创建一个存储WebDriver
对象的Singleton。这样所有测试都可以访问它。但是,如果您并行运行测试,则需要花费更多精力才能使此线程安全。
您应该进行测试@Parameterized
并期望将一组WebDriver
个对象作为参数来执行。
这可能会导致您希望为测试套件定义参数。但是,在标准JUnit 4中,您无法执行此操作。
我建议您使用this library中的ParameterizedSuite
转轮。