2017-07-25 8 views
-2

私はSelenium/Java/TestNGでWebアプリケーションを自動化しています。 アプリケーションはメインページにデータを持ち、@ dataProviderによってExcelシートから読み込まれています。メインページのいくつかの基準に基づいて、同じExcelファイル内の他のシートからデータを取得し、同じクラスの対応する@testに渡したいと考えています。多くのオプションを試しましたが、適切な解決策を見つけることができませんでした。非常に事前にDataProviderを使用して複数のExcelシートから値を読み取って複数の@testに渡す方法はありますか?

おかげで、 レッシュ

+3

こんにちは!この質問は、意味のある回答を生み出すには広すぎるかもしれません。あなたは、あなたがこれをやろうとしている間に遭遇した特定の問題にあなたの質問を減らし、[質問する方法](https://stackoverflow.com/help/how-to-ask)を参照してください。がんばろう! – mrfreester

+0

参照:[Xを行うには?](https://meta.stackoverflow.com/questions/253069/whats-the--new-current-close-reason-for-how-do-i-do- x)SOに関する期待は、質問をするユーザーが自分の質問に答えるだけでなく、その研究、コードの試行、結果を共有するということです。これは、時間をかけて自分自身を助けようとしていることを示しています。明白な回答を繰り返さないようにしてくれています。そして、より具体的で適切な答えを得ることができます。参考:[ask] – JeffC

答えて

1

ここでこれを実行することができる1つの方法です。

あなたは基本的に現在の<test>タグのコンテキストすなわちにExcelスプレッドシートの「シート」の名前を注入。、属性としてITestContext、その後@DataProvider注釈付きデータプロバイダの中から、あなたは基本的に有しているシートを決定するために、この属性を読みます読まれる。

次のサンプルは現在によって電力供給される(それは最初のものに依存しなければならない)最初@Test方法は、フロー及び第二@Test方法を行うことの一部として、この属性を注入請求これを行う2つの@Test方法を示してダイナミックデータプロバイダはデータを消費するだけです。

import org.testng.ITestContext; 
import org.testng.Reporter; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 

public class SampleTestClass { 
    /** 
    * This method is simulating the master test method which would interact with 
    * the web app and bring the application to a state wherein the next test method 
    * should take over and interact. 
    */ 
    @Test 
    public void testLogin() { 
     //Simulating toggling between multiple flows. 
     int whichFlow = Integer.parseInt(System.getProperty("flow", "1")); 
     Reporter.getCurrentTestResult().getTestContext().setAttribute("flow", whichFlow); 
    } 

    /** 
    * This method is intentionally dependent on "testLogin" because its "testLogin" that will 
    * first interact with the web application and bring the application to the place from where 
    * further interaction is required, but which will vary based on some "x" criteria 
    * The "x" criteria is now available as an attribute in the current &lt;test&gt; tag's 
    * context. 
    */ 
    @Test(dependsOnMethods = "testLogin", dataProvider = "getData") 
    public void testSomethingElse(int a, String b) { 
     //Real test method logic goes here. 
     System.out.println(a + ":" + b); 

    } 

    @DataProvider 
    public Object[][] getData(ITestContext context) { 
     int whichFlow = Integer.parseInt(context.getAttribute("flow").toString()); 
     switch (whichFlow) { 
      case 1: 
       return new Object[][]{ 
         {1, "Login"}, 
         {2, "Signup"} 
       }; 
      case 2: 
       return new Object[][]{ 
         {100, "Fees"}, 
         {200, "Charges"} 
       }; 

      case 3: 
      default: 
       return new Object[][]{ 
         {900, "Logout"}, 
         {1000, "Random"} 
       }; 

     } 
    } 
} 
+0

入力してくれてありがとう。このコンセプトは私のフレームワークに実装しようとしているものです – Reshmi

+0

あなたの質問を解決したら私の答えを受け入れることができます –

0

特定のシートをExcelシート、具体的にはワークブックにコピーまたは移動することができます。

+0

メインシートが維持するには大きすぎるのでシートを移動/コピーしたくありません。提案 – Reshmi

関連する問題