1

您能否看看我的问题并为解决问题提供任何建议。我使用 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 方法并扩展了在 @BeforeClass 参数中设置的 BaseClass(通过 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 方法。每个类都扩展了 MyTestBase.class 注释 @BeforeClass 和 @AfterClass 所在的位置,但是当我运行 TestSuite 时,TestSuite 中的每个类都启动了新的浏览器,这对我来说是一个非常大的问题。我可以为TestSuite中所有类的所有@Test方法运行一次浏览器做什么。我知道@BeforeClass 适用于一个类中的所有@Test 方法,但是如果有可能的课程应该怎么办?在 TestNG 中有 @BeforeSuite 解决了这个问题。
抱歉,有这么多问题,但我已经尝试了很多但没有成功:(非常感谢!

4

1 回答 1

0

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

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

这只有在您实例化WebDriver一次并在所有测试中使用该对象时才能实现。所以不要在@BeforeClass你的测试方法中实例化你的浏览器。

你如何初始化你的WebDriver

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

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

我建议创建一个存储对象的单例。WebDriver这样所有测试都可以访问它。但是,要使这个线程安全,需要付出更多的努力——以防您并行运行测试。

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

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

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

这可能会导致您想为您的测试套件定义参数。但是,在标准 JUnit 4 中,您不能这样做。我建议使用这个库ParameterizedSuite中的跑步者。

于 2016-10-11T08:29:58.450 回答