2016-09-27 1 views
1

こんにちは、私はJavaとSeleniumを使い慣れています。私はいくつかのことを理解しようとしています。そして、私の英語を許してください。Selenium WebDriver:異なる国の変数

のは、私が2つの以上の国を持っていると私は唯一にログインするための一つの「TestClassを」を持っているCOUNTRY1については

を私はユーザー名を持っていると仮定しましょう:。「USER1」とパスワード「PASS1」を。 国2の場合、「user2」「password2」です。私は、変数例えば
public static final String iUsername = "user1";

public static final String mUsername = "user2";を保持している別のものを作成したので、TestClassをにユーザ名とパスワードをハードコーディングする必要はありません。 TestClassをで

は、私は例えば

driver.findElement(By.id("username")).sendKeys(Constant.iUsername);それを呼び出します。

私の質問は、テストクラスでコードを常に変更することなく、テストを開始する前にどのように選択すればよいですか(mUsername)です。

私は私が新しいと私は物事を説明することであまり良くはないと言ったように。

おかげ

+0

あなたはスイートの前にそれを設定することができたり、環境から得ることができる国などの変数に基づいて配列から読み取らなければなりません。もう1つの選択肢は、データプロバイダを使用/作成することです。 – lauda

答えて

1

これは、あなたのテストのための可能な設計を示している擬似コードです:

  1. ユーザーのためのクラスを作成します。

    public class User { 
        public String username; 
        public String password; 
    
        public Users(String username, String password) { 
         this.username = username; 
         this.password = password; 
        } 
    } 
    
  2. は次のように(自分の情報を格納するクラスを作成します。静的クラス):

    public class UserFixture { 
        public static User userUSA = new User("userUSA", "passUSA"); 
        public static User userUK = new User("userUK", "passUK"); 
        public static User userChina = new User("userChina", "passChina"); 
        public static User userFrance = new User("userFrance", "passFrance"); 
    } 
    
  3. countrieのリストを使用してHashMapを作成しますあなたがテストしたいよ:

    public class AccessTest { 
        List<String> countries = Arrays.asList(
         "www.website.com", 
         "www.website.co.uk", 
         "www.website.ch", 
         "www.website.com.fr"); 
    
        Map<Users, List<String>> userCountries = new HashMap<Users, List<String>>(); 
        userCountries.put(UserFixture.userUSA, countries); 
        userCountries.put(UserFixture.userUK, countries); 
        userCountries.put(UserFixture.userChina, countries); 
        userCountries.put(UserFixture.userFrance, countries); 
    
        public static test() { 
         // u = user; c = country 
         userCountries.forEach((u, c) -> 
          c.forEach(country -> 
           goToUrl(country); 
           login(u); 
           // Write the rest of the test below 
          ) 
         ) 
        } 
    } 
    
+1

私は#3を扱う必要はありませんが、私は常に#1と#2の正確なコピーを使用しています。いい答えだ! – JeffC

0

あり、これを行うには多くの方法がありますが、最も簡単なものである -

あなたは、あなたのユーザIDとパスワードと1つの余分のパラメータ(たとえば選択= 1または2)を含む1つのプロパティファイルを持つことができますどのユーザーを使用するかを定義します。このようにして、クラスに定数を保持させる必要はありません。次に、パラメータファイルを読み込むためのクラスを1つ持つことができます。ログインデータを渡すことができるログイン機能を作成します。テストクラスでは、Choiceの値に基づいてIDとパスワードを使用できます。他

if(properties.getProperty("Choice") == 1) 
{ Login(properties.getProperty("User1Id"),properties.getProperty("Pass1")); 
else if (properties.getProperty("Choice") == 2) 
{ Login(properties.getProperty("User2Id"),properties.getProperty("Pass2")); 

} //何らかのエラー

あなたは自分のプロパティファイルで選択変数の値を変更する必要がこの方法です。

+0

よろしくお願いいたします。 しかし、私はebay.com ebay.co.uk ebay.it ...のような10の異なる国があると仮定しよう。 もしそれがかなり完全で不明瞭になるなら、私は10人で私のテストクラスを満たすだろう。 クラスの先頭にある変数を "3"のように変更し、プロパティファイルのid、password ...を変更するような解決策はありますか? ありがとう –

+0

スケーラブルなソリューションではありません。 – lauda

+0

@ P.Schultzがあなたの問題を解決するために更新されました。 Excelにアクセスしてデータを保存し、アクセスするためにPOI POIを使用することもできます。 – vv88