2017-07-19 18 views
0

この質問に関連する情報を検索しようとしましたが見つかりませんでした。ここに質問があります: 同じ卓上に2枚のシートがあります。私は両方のシートからTestNG DataProviderを使って同じクラスのデータを1回だけ印刷したいと思います。Selenium WebDriverの同じクラスの同じDataProviderを使用して2枚の同じデータを読み取る方法

シート1:

ユーザー名パスワード

administrator1パスワード1

administrator2パスワード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; 
} 

私は、コードを実行すると、それだけでnullポインタ例外で実行をスキップします。 filePathの場合と同じように、最初にsheetNameを宣言すると、1枚目のデータだけが選択されます。ここでの進め方についての助けに感謝します。

+0

あなたはNullPointerException ocoursまでデバッグしようとしましたか? – metar

答えて

0

問題は、dataProviderがテストを実行する前にデータを取得しますが、テスト内でシート名を設定することです。シートネームはその場合nullです。このため、あなたはnullpointerを取得します。シート名は、テストを実行した後に値を取得します。

同じデータプロバイダを何であれ使用したい場合は、次に、最初のテストの後にシートスイッチを追加します。

現在、次のコードはこのように動作します。

  1. dataProviderにSHEETNAME = "Sheet1の"
  2. loginVerificationテストが実行されるとinitated取得し、テストした後、それはSHEETNAME値を "Sheet2の" に変更します。
  3. dataproviderはuserNamesテストで再度初期化されますが、今回はsheetnameがsheetnameです。
  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テストが失敗した場合、sheetnameは更新されず、Sheetname1はまだ使用されます。

    異なるシートからデータを取得する場合は、2つの異なるデータプロバイダを作成することをお勧めします。

関連する問題