使用selenium grid和testng在同一台机器上运行多个浏览器

时间:2014-04-25 13:05:58

标签: selenium-webdriver testng selenium-grid

以下是代码:我想在eclipse所在的同一台机器上打开多个浏览器。我面临的问题是如何声明setup方法或t​​estng.xml以便我可以运行多个浏览器。我的测试只包含一个@Test方法。

@BeforeMethod   
public void setUp() throws MalformedURLException {
   URL url=new URL("http://localhost:4445/wd/hub");
   DesiredCapabilities capability=new DesiredCapabilities();
   capability.setBrowserName("internet explorer");
   driver=new RemoteWebDriver(url,capability);
   baseUrl = "http://www.google.co.in/";
   //driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

@Test
public void testF() throws Exception {
   driver.get(baseUrl + "/");
}

2 个答案:

答案 0 :(得分:0)

要从中获取多个浏览器,您需要添加一个返回二维Object数组的DataProvider方法。如果你的数组是2宽5长,那么你的@Test注释方法需要单独使用这2个参数,所以你还需要编辑你的方法签名。我所做的是让DataProvider返回带有testName和浏览器类型的Map<String,String>和另一个作为浏览器包装器的对象;我通常称之为WDHelper。浏览器包装器小心不要在调用.navigateTo(url)之前实例化浏览器。我使用Builder设计模式,但你也可以这样做:

@Test
public void testF( Map<String,String> params, WDHelper wdhelper ) {
    try {
        wdhelper.loadDriver( params.get("browser") );
    catch ( WebDriverException e ) {
        //do nothing yet 
    }
    wdhelper.navigateTo( params.get("url") );
}

请记住,TestNG按类(通常)分叉线程,因此您需要2个或更多测试类,每个测试类由dataprovider提供,以便触发TestNG在本地分叉浏览器的另一个实例。这通常在testng.xml文件中配置为名为parallel="classes"的参数。

答案 1 :(得分:0)

这是你可以尝试的东西

@Parameters({"browser"})
@BeforeMethod
public void setUp(String browser) throws MalformedURLException {
   URL url=new URL("http://localhost:4445/wd/hub");
   DesiredCapabilities capability=new DesiredCapabilities();
   capability.setBrowserName(browser);
   driver=new RemoteWebDriver(url,capability);
   baseUrl = "http://www.google.co.in/";
}

在你的testng xml中,创建两个测试并设置parallel = tests

<suite name="My Suite1" parallel="tests" thread-count="5" >
    <test verbose="2" name="Default1 test">
        <parameter name="browser" value="firefox"></parameter>
         <classes>
            <class name="com.nv.demo.testngtests.ParamsTest"/>

          </classes>
      </test>
      <test verbose="2" name="Default2 test">
        <parameter name="browser" value="internet explorer"></parameter>
         <classes>
            <class name="com.nv.demo.testngtests.ParamsTest"/>

          </classes>
      </test>
 </suite>