2017-07-19 84 views
0

我試圖搜索此問題的相關信息,但無法找到。這裏是問題: 在同一個excel中有兩張表。我想在同一個類中僅使用TestNG DataProvider一次打印兩張表中的數據。如何從兩張相同的Excel中使用相同的DataProvider讀取數據Selenium WebDriver中的同一類

工作表Sheet1:

用戶名密碼

管理員1密碼1

管理員2密碼2

Sheet2中:

姓氏

ABC DEF

PQR XYZ

String path=<filePath>; 
String sheetName; 
@Test (dataProvider="loginInfo") 
public void loginVerification(String username, String password) throws InterruptedException 
{ 
    sheetName="Sheet1"; 
    System.out.println("Username:"+username+" "+"Password:"+password); 
    System.out.println("************"); 
} 

@Test (dataProvider="loginInfo") 
public void userNames(String firstName, String lastName) 
{ 
    sheetName="sheet2"; 
    System.out.println("FirstName:"+firstName+" LastName:"+lastName); 
    System.out.println("*******"); 
} 


@DataProvider(name="loginInfo") 
public Object[][] userFormData() throws BiffException, IOException 
{ 
    Object[][] data = testData(path, sheetName); 
    return data; 
} 

public Object[][] testData(String path, String sheetName) throws BiffException, IOException 
{ 
    <code to read excel data> 
     } 
    } 
    return inputData; 
} 

當我運行的代碼,它只是跳過與空指針異常執行。 如果我在開始時聲明sheetName,就像我爲filePath所做的那樣,只會從第一張表中選取數據。任何關於如何在這裏繼續的幫助表示讚賞。

+0

你試過調試,直到NullPointerException ocours? – metar

回答

0

問題是dataProvider在運行測試之前獲取數據,但您在測試中設置了sheetname。所以sheetname在這種情況下是空的。這就是爲什麼你得到一個空指針。運行測試後,sheetname將獲得該值。

所以,如果你想使用相同的數據提供者,無論如何。然後,我會在第一次測試後添加圖紙開關。

因此,目前下面的代碼將會像這樣工作。

  1. DataProvider獲取initated與SHEETNAME =「Sheet 1中」
  2. loginVerification測試跑及試驗後它改變了SHEETNAME值爲「Sheet 2中」。
  3. Dataprovider再次爲userNames測試啓動,但是這次sheetname是Sheet2。
  4. userNames測試使用從Sheet2獲取的數據運行。

    String path=<filePath>; 
    String sheetName = "SheetName1"; 
          @Test (dataProvider="loginInfo") 
          public void loginVerification(String username, String password) throws InterruptedException 
    { 
    
        System.out.println("Username:"+username+" "+"Password:"+password); 
        System.out.println("************"); 
        sheetName="Sheet2"; 
    } 
    
    @Test (dataProvider="loginInfo") 
    public void userNames(String firstName, String lastName) 
    { 
    
        System.out.println("FirstName:"+firstName+" LastName:"+lastName); 
        System.out.println("*******"); 
    } 
    
    
    @DataProvider(name="loginInfo") 
    public Object[][] userFormData() throws BiffException, IOException 
    { 
        Object[][] data = testData(path, sheetName); 
        return data; 
    } 
    
    public Object[][] testData(String path, String sheetName) throws BiffException, IOException 
    { 
        <code to read excel data> 
         } 
        } 
        return inputData; 
    } 
    

    有了這個解決方案,測試很容易出錯。如果loginVerification測試失敗,則表單名稱不會更新,它仍將使用Sheetname1。

    如果他們從不同的工作表中獲取數據,我更喜歡創建2個不同的數據提供者。

相關問題