2013-07-22 21 views
2

我正在嘗試爲傳遞參數(如用戶名和密碼)的登錄測試腳本創建一個函數。我對這個新手請做詳細說明。下面是我written--如何創建一個傳遞測試腳本參數的webdriver函數?

public void portalLogin(String Username, String Password){ 

driver.get(URL); 
driver.findElement(By.id("UserName")).clear(); 
driver.findElement(By.id("UserName")).sendKeys(Username); 
driver.findElement(By.id("Password")).clear(); 
driver.findElement(By.id("Password")).sendKeys(Password); 
driver.findElement(By.cssSelector("input.submitBtn")).click(); 
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
} 

我只是想叫這個奇怪的函數的另一個測試類,這樣我就不必一遍又一遍寫的代碼。請幫忙!

+0

在一開始就設置隱式超時。另外,你是否嘗試使用頁面對象模式? – Arran

+0

@Arran我想我試圖使用頁面對象模式。沒有做過這個b4。你能把我的代碼轉換成這種模式嗎? – Ash

回答

3

你說你試圖使用頁面對象模式。這是我認爲你正在尋找:

public class LogonPage { 
@FindBy(id="UserName") 
public WebElement userNameField; 
@FindBy(id = "Password") 
public WebElement passwordField; 
@FindBy(css = "input.submitBtn") 
public WebElement submitButton; 

public LogonPage(WebDriver driver){ 
    PageFactory.initElements(driver, this); 
} 
public void portalLogin(String username, String password){ //Only call this when you are already on the logon page 
     userNameField.clear(); 
     userNameField.sendKeys(username); 
     passwordField.clear(); 
     passwordField.sendKeys(password); 
     submitButton.click(); 
     //Waiting should also be done after the function 
} 

}

然後,您將不得不這樣做在你的主代碼:

LogonPage page = new LogonPage(driver); 
page.doLogin(username, password); 
0

設置超時並首先導航到URL。在應用程序中打開登錄頁面。

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);  
driver.get(URL); 

    public void doLogin(String Username, String Password) 
{ 
    driver.findElement(By.id("UserName")).clear(); 
    driver.findElement(By.id("UserName")).sendKeys(Username); 
    driver.findElement(By.id("Password")).clear(); 
    driver.findElement(By.id("Password")).sendKeys(Password); 
    driver.findElement(By.cssSelector("input.submitBtn")).click(); 
    } 

讓我知道,如果你需要更多的幫助...

+0

@Smit得到一個錯誤,說「組件返回失敗代碼:0X904b000a(NS_ERROR_MALFORMED_URl)」 – Ash

+0

@Ash我不是一個人誰給了答案。這是@維納,我剛剛格式化了他的代碼片段。你應該對他說話。你提到的關於'URL'的錯誤。你能向我們展示你的代碼中的「URL」字符串嗎? – Smit

+0

@Smit謝謝你的擡頭。 http後,我錯誤地放了一個分號。無論如何,所以代碼運行,但我得到一個NullPointerException。 – Ash

0

這裏是一個JUnit的參數化測試的例子。我認爲這是你要求的。

@RunWith(Parameterized.class) 
public class DataProviderTest extends WebDriverUtils { 

    private static String testName, searchString, ddMatch; 

    public DataProviderTest(String tName, String sString, String dMatch) { 
     testName = tName; 
     searchString = sString; 
     ddMatch = dMatch; 
    } 

    @Before 
    public void setUp() { 
     System.out.println("setUp"); 
    } 

    @Parameters(name = "{0}: {1}: {2}") 
    public static List<String[]> loadParams() { 
     File tFile = loadGradleResource(System.getProperty("user.dir") + separator + "build" + 
       separator + "resources" + separator + "test" + separator + "testdata2.csv"); 
     List<String[]> rows = null; 
     if (tFile.exists()) { 
      CSVReader reader = null; 
      try { 
       reader = new CSVReader(new FileReader(tFile), ','); 
       rows = reader.readAll(); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     //String[][] csvMatrix = rows.toArray(new String[rows.size()][]); 
     System.out.println("Finished loadParams()"); 
     return rows; 
    } 

    @Test 
    public void testParams() { 
     System.out.println("Param '{}' being run...", testName); 
     System.out.println("Search string: " + searchString); 
     System.out.println("ddMatch: " + ddMatch); 
     System.out.println("Test '{}' is done.", testName); 
    } 

    @After 
    public void cleanUp() { 
     System.out.println("Finished cleanUp"); 
    } 

} 
0
public static WebDriver LoginPage(String URL, CharSequence UName, CharSequence Pwd) throws Exception 
     { 
      driver.get(URL); 
      driver.findElement(By.id("username")).clear(); 
      driver.findElement(By.id("username")).sendKeys(UName); 
      driver.findElement(By.id("password")).clear(); 
      driver.findElement(By.id("password")).sendKeys(Pwd); 

      // [click on link or button after which popup window will appear. ] 
     driver.findElement(By.name("login")).click(); 
    // System.out.println("URL of the page before - switchingTo: " + driver.getCurrentUrl()); 
     Thread.sleep(2000); 

      //Switch to newly opened window and get the page titele  
       for(String CurrentWindowHandle : driver.getWindowHandles()) 
        { driver.switchTo().window(CurrentWindowHandle);  
        } 

      System.out.println("URL of the page after - switchingTo: " + driver.getCurrentUrl()); 
      Thread.sleep(3000); 
      return driver; 
     }   

然後,在驅動程序腳本它可以被稱爲 LoginPage(vURL,vUserName,vPassword);

相關問題