Selenium TestNG从Excel工作表中传入参数

我正在创build一个functiontesting,selenium将作为一个用户在网站上注册一个帐户,但是,网站注册有16个input字段来填写。一些Int值和一些string。 有没有更简单的方法来做到这一点?

@Test(dataProvider = "Reg") public void login(String sUsername, String sPassword, String sMemorableWord) { 

我只在那里传递3个值,但是完成了完整的注册testing,将会有16个string或Int参数。 这将是一个巨大的名单是否有另一种方式来做到这一点?

有一个更简单的方法来做到这一点。 如果您将所有参数放在一个Excel电子表格行中,那么只需将所有参数读入一个对象即可。 然后,在你的数据提供者中,返回一个包含所有这些参数的对象。

 @Test(dataProvider = "Reg") public void login(WebDriver drvInstance, HashMap params) { 

这是我以前的做法。 然后,在dataprovider中,我只是为每个testing创build新的驱动程序实例,并收集一个对象中的所有参数,然后返回这两个项目。 另外,我使用Apache MetaModel来读取电子表格。

在你的数据提供者中,做这样的事情:

 @DataProvider(name = "test1") public Object[][] prepareTestData() { Object[][] vals = new Object[columns][rows]; for each row in spreadsheet { get rows from spreadsheet into a hashmap create new Capabilities object from hashmap values create webdriver from capabilities add driver and hashmap to object[][] } return vals; } 

你可能没有意识到这一点的@BeforeMethod ,那就是传递给方法的那两个参数也可以从@BeforeMethodconfiguration阶段访问。 JUnit不能做的事情。 而且,通过这种方式,TestNG可以处理多个浏览器实例的线程。

另外,Rudziankoŭ有一个点。 您可以使用dataprovider方法中的Builder模式来构build对象,但是我会在稍后处理它。

你可以从TestPro的DataProvider中获得帮助。 在DataProvider中,将所有值加载到可能来自Excel的Hashtable中,并返回Object [] []。

在@Test方法中收集数据提供者,将Hashtable h作为parameter passing给函数方法,然后从哈希表中获取所需的数据。

下面的简单例子可以给你一个好主意

  static WebDriver driver; @Test(dataProvider="getdata") public void myTestCase(Hashtable<String, String> h){ driver=new FirefoxDriver(); driver.get(h.get("url")); } @DataProvider(name="getdata") public Object[][] testdata(){ Hashtable<String, String> h=new Hashtable<>(); //collect data from excel sheet h.put("url", "http://www.google.com"); Object[][] obj={{h}}; return obj; }