2016-10-20 12 views
2

QAとして2つのテーブルを比較する必要があります。私は、両方の値をSeleniumで次のコードを使用して抽出しています。Selenium with Javaを使用して2つのテーブルを比較する

はFYI:私は2つのテーブルのそれぞれのために私は両方のテーブルの各セルが等しいかどうかを確認したい(すなわち、各環境内の1つ)

String first_part = ".//*[@id='Matrix']/tbody/tr["; 
    String second_part = "]/td["; 
    String third_part = "]/a"; 


    //rows of the matrix table (Always 7) 
    for (int i=4; i<=7; i++){ 
     //Columns of the matrix table (Always 4) 
     for (int j=1; j<=4; j++){ 
      //Prepare final xpath for each cell value 
      String matrix_cell_path = first_part+i+second_part+j+third_part; 
       //Retrieve cell-value 
       String matrix_cell_data= driver.findElement(By.xpath(matrix_cell_path)).getText(); 
       System.out.print("matrix_cell_data["+i+"]["+j+"]= "+matrix_cell_data + " "); 
     } 
      System.out.println(""); 
      System.out.println(""); 
    } 


    String first_part_Prod = ".//*[@id='Matrix']/tbody/tr["; 
    String second_part_Prod = "]/td["; 
    String third_part_Prod = "]/a"; 

    //rows of the matrix table (Always 7) 
    for (int k=4; k<=7; k++){ 
     //Columns of the matrix table (Always 4) 
     for (int l=1; l<=4; l++){ 
      //Prepare final xpath for each cell value 
      String matrix_cell_path_Prod = first_part_Prod+k+second_part_Prod+l+third_part_Prod; 
       //Retrieve cell-value 
       String matrix_cell_data_Prod = second_driver.findElement(By.xpath(matrix_cell_path_Prod)).getText(); 
       System.out.print("matrix_cell_data_Prod["+k+"]["+l+"]= "+matrix_cell_data_Prod + " "); 
     } 
      System.out.println(""); 
      System.out.println(""); 
    } 

二つの異なるブラウザのウィンドウと異なる変数名を使用していました。どうやってするの?

私は、次のチェックを使用しますが、エラーを示しています

matrix_cell_dataは、変数に解決することはできません。

//Matrix Data - Content Check: 
    try { 
     matrix_cell_data = matrix_cell_data_Prod; 
     System.out.println("Great"); 
    }catch (Exception ex2){ 
     System.out.println("Exception"+ex2); 
    } 
+1

両方の変数はforループの内部で定義されているため、ループの各繰り返しの内側には可視性が制限されています。値の位置を参照して2つの配列を比較する場合は、値を2次元配列に格納します。または、リストを使用してストアして比較する – Grasshopper

+0

簡単な方法は、各セルを文字列ビルダーに追加することです。次に、文字列を比較して差異を取得します。 –

答えて

0

私は通常、最初のクラスを作成し、これを行う、MyMatrixDataを言う

public class MyMatrixData implements Comparable<MyMatrixData> { 
    private String columnOneName; 
    private String columnTwoName; 
    private String columnNName; 
    //With getters and setters (not shown) 

    @Override 
    public int compareTo(MyMatrixData actualData) { 
     assertEquals("Some helpful text", this.getColumnOneName(), actualData.getColumnOneName()); 
     assertEquals("Some helpful text", this.getColumnTwoName(), actualData.getColumnTwoName()); 
     assertEquals("Some helpful text", this.getColumnNName(), actualData.getColumnNName()); 

     return 0; 
    } 
} 

自体にComparableを実装する次の私は、上に表示される実際のデータを引き起こすステップと機能ファイルを作成しますページ。これに続いて、テーブルから実際のデータを取得し、それを予想と比較するステップが続きます。ような何か:

Feature: Compare expected MatrixData to actual 

Scenario: Some data driven or choice driven test 
    Given user "me" logs in to the Matrix system 
    When I navigate to the page that displays MatrixData 
    Then the displayed MatrixData matches the expected 
    | columnOneName | columnTwoName | columnNName | 
    | Killroy  | was   | here  | 
    | Betty Bop  | was   | too   | 

は、ステップ定義が

@Then ("^the displayed MatrixData matches the expected$) 
public void the_displayed_matrixdata_matches_expected(List<MyMatrixData> expectedData) throws Throwable { 
    for (int i=1;i<expectedData.size(),i++) { 
     MyMatrixData actualMatrixRow = new MyMatrixData(); 
     actualMatrixRow.setColumnOneName(aPageObject.getColumnOneName(i)); 
     actualMatrixRow.setColumnTwoName(aPageObject.getColumnTwoName(i)); 
     actualMatrixRow.setColumnNName(aPageObject.getColumnNName(i)); 

     assertEquals("helpful msg", 0, expectedData.get(i).compareTo(actualMatrixRow)); 
    } 
} 

のようになります。私は運動としてHTMLからデータを取得するために、ページオブジェクトのメソッドを残しました。私は通常、ページオブジェクトメソッドを作成して実際の行数を取得し、予想される行数と比較できるようにします。また、運動として残しました。 :-) compareToのすべてのアサートが成功した場合にのみ、0が返されることに気付くかもしれません。ステップのdefでのアサーションは、より多くのドキュメントです。

私はこのパターンを何度も繰り返し使用します。私はそれが役に立つと思う。

+0

予期された予期された結果がない場合は、実際に表示されているデータの1つを選択し、他の実際のデータと比較することができます。論理はまったく同じです。 – MikeJRamsey56

関連する問題