Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何优雅地使用SeleniumWebDriver测试同一网站的不同用户名和密码?_Java_Selenium - Fatal编程技术网

Java 如何优雅地使用SeleniumWebDriver测试同一网站的不同用户名和密码?

Java 如何优雅地使用SeleniumWebDriver测试同一网站的不同用户名和密码?,java,selenium,Java,Selenium,我有以下使用用户名和密码登录Facebook的示例代码 @Test public void fb() { FirefoxProfile ffprofile = new FirefoxProfile(); ffprofile.setPreference("general.useragent.override", "iPhone"); //this will change the user agent which will open mobile browse

我有以下使用用户名和密码登录Facebook的示例代码

@Test
    public void fb() {
        FirefoxProfile ffprofile = new FirefoxProfile();
        ffprofile.setPreference("general.useragent.override", "iPhone"); //this will change the user agent which will open mobile browser
        WebDriver driver = new FirefoxDriver(ffprofile);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().setSize(new Dimension(400, 800)); //just to change the window size so that it will look like mobile ;)
        driver.get("http://www.fb.com/");
        driver.findElement(By.name("email")).sendKeys("user1");
        driver.findElement(By.name("pass")).sendKeys("password");
        driver.findElement(By.name("login")).click();
    }
接下来我还有5个Facebook个人资料,分别是user2、user3、user4、user5和user6。我想使用这些配置文件登录Facebook,并进行一些自动测试

我的问题是,我应该为不同的用户名重新编写上述代码5次以上,还是有其他优雅的方法来实现这一点


提前谢谢

您没有提到您正在使用哪个测试框架,所以

  • 如果这是JUnit,则可以使用。它们将允许您使用各种参数运行相同的测试:

    @RunWith(Parameterized.class)
    public class LoginTest {
        @Parameters
        public static Collection<Object[]> data() {
            return Arrays.asList(new Object[][] {     
             { "user1", "password" }, 
             { "user2", "password" } //...
        });
    }
    
    private String username, password;
    
    public LoginTest(String username, String password) {
         this.username = username;
         this.password = password;
    }
    
    @Test
    public void fb() {
        // most of it won't change, except:
        driver.findElement(By.name("email")).sendKeys(username);
        driver.findElement(By.name("pass")).sendKeys(password);
        // ...
    }
    

顺便说一下:每个类初始化驱动程序一次是一个更好的主意,因为创建配置文件/启动浏览器是一项昂贵的操作,如果您有很多测试,它可能会降低您的速度。在每次测试之后,你也应该考虑<强>日志记录< /强>,这样你的下一个登录是干净的。

你没有提到你使用的是哪个测试框架,所以

  • 如果这是JUnit,则可以使用。它们将允许您使用各种参数运行相同的测试:

    @RunWith(Parameterized.class)
    public class LoginTest {
        @Parameters
        public static Collection<Object[]> data() {
            return Arrays.asList(new Object[][] {     
             { "user1", "password" }, 
             { "user2", "password" } //...
        });
    }
    
    private String username, password;
    
    public LoginTest(String username, String password) {
         this.username = username;
         this.password = password;
    }
    
    @Test
    public void fb() {
        // most of it won't change, except:
        driver.findElement(By.name("email")).sendKeys(username);
        driver.findElement(By.name("pass")).sendKeys(password);
        // ...
    }
    

顺便说一下:每个类初始化驱动程序一次是一个更好的主意,因为创建配置文件/启动浏览器是一项昂贵的操作,如果您有很多测试,它可能会降低您的速度。在每次测试之后,您也应该考虑<强>日志记录< /强>,以便下次登录是干净的。

基于关键字的测试。您将对给定的一组关键字(在本例中为用户/密码对)重复测试。您的函数需要将这些值作为参数:
public void fb(字符串用户,字符串密码){…sendKeys(用户)…sendKeys(密码)…
基于关键字的测试。您需要对给定的关键字集(在本例中为用户/密码对)重复测试。您的函数需要将这些值作为参数:
public void fb(字符串用户,字符串密码){…sendKeys(用户)…sendKeys(密码)..
我在这里使用JUnit。但是,您上次建议的方法似乎解决了我的问题。谢谢!我在这里使用JUnit。但是,您上次建议的方法似乎解决了我的问题。谢谢!