如何使用Java中的TestNG使用Selenium Web驱动程序从2张相同的Excel文档中读取数据

时间:2015-01-06 12:46:49

标签: java selenium webdriver testng

加载了google主页。 (Google.co.in)

Sheet 1 Master sheet  :   Tc_Name  & Executable are columns 
         Tc_Name   Executable
Row 1 :   Test1       No
Row 2 :   Test2       Yes  

Sheet 2 Test_Case script Sheet:Main_TC_Name & Action_search_Text are columns
          Main_TC_Name(Should be same as TC_Name of sheet 1)    Action_search_Text 
Row 1  :   Test1                                                      you
Row 2  :   Test1                                                      gmail
Row 3  :   Test2                                                      images

Sheet 3: xpath sheet : Name & xpath Name are columns 
          Name (should be same as Action_search_Text )    xpath Name 
Row 1:   you                                            //*[@id="gb"]/div[1]/div[1]/div[1]/div[1]/a
Row 2 :  gmail                                         //*[@id="gb"]/div[1]/div[1]/div[1]/div[2]/a
Row 3 : images                                         //*[@id="gb"]/div[1]/div[1]/div[1]/div[3]/a

1)只应检索表1中“可执行文件”列下的“是”中的“是”。转到第2页找到相同的测试用例名称&从表3&中检索那个xpath。然后在前端执行。

例如: 表1:选择Test2作为其标记在Yes ----然后转到表2 ----搜索表2中的Test2实例 - 你将获得Row 3 ie images ----然后转到表3获取那个xpath ---把它放在前端。

一旦在前端检索到,我想执行Click

1 个答案:

答案 0 :(得分:0)

您可以使用@DataProvider注释并定义测试所需的工作表。

您必须创建DataProvider类,命名数据提供者并在测试类中使用注释@Test

示例:

@Test(testName = "test", dataProviderClass = ReturnExcelSheetData.class, dataProvider = "dataP") //dataProviderClass is optional

也许这不是您问题的直接答案,但我强烈建议您使用注释。它为您提供控制,您运行的测试,以什么顺序运行,您可以调整@DataProvider为3种不同的测试选择3种不同的Excel或表。

更直接的答案是: 创建一个@Test,设置@DataProvider。如果data = yes,则运行METHOD 1(不测试)// example

有关TestNG的更多信息:http://testng.org/doc/documentation-main.html

编辑:

TEST CLASS:

public class StackOverflow extends Ustawienia {
    Logowanie page; //new constructor for login page

  @Test(testName = "test", description = "", enabled = true, dataProviderClass = StackDataProvider, dataProvider = "excel")
  public void Testing(login, password) throws Exception {
      driver.get("some random page");
      page = new Logowanie(driver, writer);
      page.methodFromLogowanieClass();

TestNG使用像@Test这样的注释来读取代码。例如,您可以使用@BeforeClass@AfterClass来设置在运行正确测试之前必须执行的程序,以及在此测试之后要执行的操作(例如 - 创建干净数据)

@DataProvider允许您使用xls或csv。

DATA PROVIDER CLASS(仅举例):

@DataProvider(name = "excel")
public static Object[][] returnExcelSheetData(Method method)
        throws BiffException, IOException 
        {
    String absolutePath = filePath.concat("/").concat(fileName);
    FileInputStream file = new FileInputStream(new File(absolutePath));
    Workbook workbook = Workbook.getWorkbook(file);
    Sheet worksheet = workbook.getSheet(sheetName);

    int ROWS = worksheet.getRows() - 1;
    int COLS = worksheet.getColumns();

    Object[][] dataset = new Object[ROWS][COLS];
    for (int rowCount = 0; rowCount < ROWS; rowCount++) {
        for (int colCount = 0; colCount < COLS; colCount++) {
            dataset[rowCount][colCount] = worksheet.getCell(colCount,
                    rowCount + 1).getContents();
        }
    }
    workbook.close();
    file.close();
    return dataset;

迭代excel表并返回数据。如果您将列loginpassword作为标题 - 它会很好用。下一行(2)将从具有特定@DataProvider的{​​{1}}到@Test读取。

这是我的@DataProvider,我还使用了一个接口来获取数据,因此它可能对你不起作用。您可以找到大量的dataProvider示例,这些示例遍历excel。

我希望它有所帮助,我会为下一个问题寻找帮助。