2016-05-17 19 views
0

我有以下示例代碼,使用一個用戶名和密碼登錄到Facebook,如何使用Selenium WebDriver優雅地測試同一網站的不同用戶名和密碼?

@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個人說用戶2用戶3,USER4,USER5和user6。我想使用這些配置文件登錄到Facebook,並進行一些自動測試。

我的問題是我應該重新寫上面的代碼5次不同的用戶名,或者有沒有其他優雅的方式來實現這個?

在此先感謝!

+1

基於關鍵字的測試。 https://en.wikipedia.org/wiki/Keyword-driven_testing你會重複測試一組給定的關鍵字(在這種情況下,用戶/密碼對)。你的函數需要將值作爲參數:'public void fb(String user,String password){... .sendKeys(user).... sendKeys(password)....' –

回答

2

你沒有提到你正在使用的測試框架,所以

  • 如果這是JUnit中,你可以使用Parameterized tests。他們會允許你運行你有不同的參數此相同的測試:

    @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); 
        // ... 
    } 
    
  • NUnit的有similar concept

  • 最後,如果你不能使用任何這種善良的,你可以只創建一個函數,代表您的登錄功能,並從5個不同的測試中調用它。這樣,你仍然有測試呼叫的一些冗餘,但不是代碼登錄:

    private WebDriver driver; 
    
    public void login(String username, String password) { 
        driver.findElement(By.name("email")).sendKeys(username); 
        driver.findElement(By.name("pass")).sendKeys(password); 
        driver.findElement(By.name("login")).click(); 
    } 
    
    // Move code to init driver to run before every test 
    @Before 
    public void initDriver() { 
        FirefoxProfile ffprofile = new FirefoxProfile(); 
        ffprofile.setPreference("general.useragent.override", "iPhone"); //this will change the user agent which will open mobile browser 
        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/"); 
    } 
    
    @Test 
    public void fb1() { 
        login("user1", "password"); 
    } 
    
    @Test 
    public void fb2() { 
        login("user2", "password"); 
    } 
    
    // etc 
    

順便說一句:每是一個更好的主意類初始化驅動一次,因爲創建配置文件/啓動瀏覽器是一個昂貴的操作,如果你有很多測試,它可能會減慢你的速度。每次測試之後,您還應該考慮註銷,以便您下次登錄時是乾淨的。

+0

我正在使用JUnit這裏。但是,您最後一次建議的方法似乎解決了我的問題。謝謝! –

相關問題