Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在BrowserStack中的不同浏览器上运行JUnit套件的配置文件_Java_Selenium_Configuration_Junit_Suite - Fatal编程技术网

Java 在BrowserStack中的不同浏览器上运行JUnit套件的配置文件

Java 在BrowserStack中的不同浏览器上运行JUnit套件的配置文件,java,selenium,configuration,junit,suite,Java,Selenium,Configuration,Junit,Suite,你能看看我的问题并给我一些解决问题的建议吗。 我使用JUnit4和Selenium2WebDriver。 因此,我有一个类来运行JUnit套件: @RunWith(Suite.class) @Suite.SuiteClasses({className1.class, clasName2.class}) public class TestSuite { public static TestSuite suite() { TestSuite suite = new TestSui

你能看看我的问题并给我一些解决问题的建议吗。 我使用JUnit4和Selenium2WebDriver。 因此,我有一个类来运行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 method,并通过在BrowserStack计算机上运行套件所需的功能扩展了在@BeforeClass参数中设置的基类:

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组成,每个.class中都有@Test method。每个类都在注释@BeforeClass和@AfterClass所在的位置扩展了MyTestBase.class,但当我运行TestSuite时,TestSuite中的每个类都启动了新的浏览器,这对我来说是一个很大的问题。对于跨TestSuite中的所有类运行一次browser for all@Test方法,我可以做些什么。我知道@BeforeClass适用于一个类中的所有@Test方法,但是如果有可能的类,应该怎么做呢?在TestNG中,有@BeforeSuite解决了这个问题。 很抱歉,有这么多问题,但我已经尝试了很多,但没有成功:
非常感谢

你问了很多关于不同主题的问题。我会设法把事情弄清楚的

重用浏览器,而不是为每个测试类打开新的浏览器 这只有在实例化WebDriver一次并在所有测试中使用该对象时才能实现。因此,不要在测试的@BeforeClass方法中实例化浏览器

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

如何重用WebDriver对象并在测试类之间共享它? 我建议创建一个存储WebDriver对象的。这样所有测试都可以访问它。然而,要使这个线程安全需要更多的努力——以防您并行运行测试

使用不同的浏览器运行测试 您应该将测试@Parameterized,并期望执行一组WebDriver对象作为参数

两者结合:不同的浏览器和在测试之间重用浏览器 这可能会导致您希望为测试套件定义参数。然而,在标准JUnit4中,您不能这样做。
我建议使用中的ParameterizedSuite runner。

我从未见过这样的设置。。有没有想过让Maven或Ivy构建系统来处理您的测试,而不是一个专门运行其余类的类?@PeterSmith感谢您的回答。是的,以前我使用ant来运行测试,它运行得很好,但是我只有几个测试类。现在,我的项目越来越大,我已经重构了我的代码,并决定形成可能会及时更改的测试套件。如何通过build.xml文件中的ant命令将浏览器参数传递给TestSuite?谢谢谁是彼得史密斯??你看到这个了吗抱歉@PeterSmith=您考虑过使用TestNG而不是Junit吗?使用TestNG,您可以将参数存储在xml中,并将其传递给测试,然后在@BeforeSuite注释方法中启动浏览器。