2016-09-27 70 views
1

嗨,我是新來的Java和硒,我想弄清楚一些事情。請原諒我的英語。硒WebDriver:變量爲不同的國家

假設我有2個或更多的國家和我只有一個「TestClass的」在登錄

對於國家1我的用戶名:「USER1」和密碼「PASS1」。 對於country2,它是「user2」「password2」。我不想硬編碼的用戶名和密碼進入的TestClass所以我創造了一個又一個,其保持可變e.g
public static final String iUsername = "user1";

public static final String mUsername = "user2";

在TestClass中我稱之爲e.g

driver.findElement(By.id("username")).sendKeys(Constant.iUsername);

我的問題是我如何才能在開始測試之前選擇其他用戶名(mUsername)而無需始終更改測試類中的代碼。

就像我說的我是新的,我不擅長解釋事情。

感謝

+0

你應該從基於像國家的變量,你可以套件之前設置它,或者你可以從環境中獲取數組讀取。另一種選擇可能是使用/創建數據提供者。 – 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. 創建一個帶有列表的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或2)定義您想要使用哪個用戶。這樣你就不需要讓類持有常量。然後你可以有一個類來讀取參數文件。創建一個可以傳遞登錄數據的登錄功能。然後在您的測試課程中,您可以根據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

OKay謝謝。 但是,讓我們假設我有10個不同的國家,如ebay.com ebay.co.uk ebay.it ... 如果我會填補我的測試類與10其他如果它會得到非常充分和不清楚。 是否有任何解決方案只需要在類的開始處更改變量以像「3」並且需要屬性文件的id,password ...? 謝謝 –

+0

不是一個可擴展的解決方案。 – lauda

+0

@ P.Schultz更新,以解決您的問題。您也可以使用Excel來存儲數據並使用apache POI來訪問它。 – vv88