以下是代码:我想在eclipse所在的同一台机器上打开多个浏览器。我面临的问题是如何声明setup方法或testng.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 + "/");
}
答案 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>