2016-09-27 99 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