2015-02-11 8 views
0

я делаю Driven рамки Селен данных с использованием TestNG в языке JavaСелен TestNG Java - слишком много параметров

У меня есть pageObjectLogin_Page.java хранить все локаторы доступны на этой странице.

Тогда у меня есть appModulesLogin_Action.java как общая функция для повторного входа в систему.

Как вы заметили, шаг ExecuteLoginAction() такие же, но имеют различное количество параметров из-за необходимости ввода тестового ввода. Как я могу оптимизировать код в такой ситуации?

Как и в моем сценарии тестирования, я буду называть Login_Action.ExecuteLoginAction(many...parameters)

Как я могу избежать этого длинного списка параметров в MyTestScript_001Test() и Login_Action.ExecuteLoginAction()

pageObjects Login_Page.java

package pageObjects; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 

    public class Login_Page extends BaseClass { 

     private static WebElement element = null; 

     public Login_Page(WebDriver driver){ 
       super(driver); 
     } 

     public static WebElement txt_enterUsername() throws Exception{ 
      try{ 
       element = driver.findElement(By.name("username")); 
      }catch (Exception e){ 
       throw(e); 
       } 
      return element; 
     } 

     public static WebElement txt_enterPassword() throws Exception{ 
      try{ 
       element = driver.findElement(By.name("password")); 
      }catch (Exception e){ 
       throw(e); 
       } 
      return element; 
     } 

     public static WebElement btn_clickLoginBtn() throws Exception{ 
      try{ 
       element = driver.findElement(By.name("loginBtn")); 
      }catch (Exception e){    
       throw(e); 
       } 
      return element; 
     }           
    } 

appModules Login_Action.java

package appModules; 
import org.apache.log4j.Logger; 
import org.openqa.selenium.WebDriver; 
import org.testng.Reporter; 

import pageObjects.Login_Page; 

    public class Login_Action {  

     public static void ExecuteLoginAction(WebDriver driver, String ColTestCaseName, String ColUsername, String ColPassword, 
       String ColFirstName, String ColLastName, String ColAddress, String ColCountry, String ColGender) throws Exception{   

      // Click Login link 
      Home_Page.lnk_clickLoginBtn().click(); 

      // Enter text for Username  
      Login_Page.txt_enterUsername().sendKeys(ColUsername); 

      // Enter text for Password 
      Login_Page.txt_enterPassword().sendKeys(ColPassword); 

      // Click Login submit button 
      Login_Page.btn_clickLoginSubmitBtn().click(); 

     } 

     public static void ExecuteLoginAction(WebDriver driver, String ColTestCaseName, String ColUsername, String ColPassword, 
       String ColFirstName, String ColLastName, String ColAddress) throws Exception{   

      // Click Login link 
      Home_Page.lnk_clickLoginBtn().click(); 

      // Enter text for Username  
      Login_Page.txt_enterUsername().sendKeys(ColUsername); 

      // Enter text for Password 
      Login_Page.txt_enterPassword().sendKeys(ColPassword); 

      // Click Login submit button 
      Login_Page.btn_clickLoginSubmitBtn().click(); 

     } 

    } 

Main Test Script (MyTestScript_001)

@Test(dataProvider="MyTestScript_001Data") 
    public void MyTestScript_001Test(String ColTestCaseName, String ColUsername, String ColPassword, 
       String ColFirstName, String ColLastName, String ColAddress) throws Exception{ 


      // Login to web application 
      Login_Action.ExecuteLoginAction(driver, ColTestCaseName, ColUsername, ColPassword, 
       ColFirstName, ColLastName, ColAddress, ColCountry, ColGender);            

      // Enter First Name 
      UpdateProfile_Page.txtbx_enterFirstName().sendKeys(ColFirstName); 

      // Enter Last Name 
      UpdateProfile_Page.txtbx_enterLastName().sendKeys(ColLastName); 

      Search_Action.ExecuteSearchAction(driver, ColTestCaseName, ColUsername, ColPassword, 
       ColFirstName, ColLastName, ColAddress, ColCountry, ColGender); 

Main Test Script (MyTestScript_002)

Main Test Script (MyTestScript_002) 

@Test(dataProvider="MyTestScript_002Data") 
public void MyTestScript_001Test(String ColTestCaseName, String ColUsername, String ColPassword, 
      String ColFirstName, String ColLastName, String ColAddress) throws Exception{ 


     // Login to web application 
     Login_Action.ExecuteLoginAction(driver, ColTestCaseName, ColUsername, ColPassword, 
      ColFirstName, ColLastName, ColAddress);                  

     // Enter text for Address 
     UpdateProfile_Page.txtbx_enterAddress().sendKeys(ColAddress); 

Ваше предложение сильно ценю!

+0

Если executelogin действия требуется только имя пользователя и пароль, почему вы проходящий в так много данных. Просто введите имя пользователя и пароль. –

+0

@niharika_neo, мой тест не только для входа в систему, я просто сворачиваю код, чтобы показать в вопросе. на самом деле мой параметр теперь до 20 ++. thanks – christo

+0

Сделать объекты вместо передачи строк. например. Создать пользовательский класс, который имеет имя, pwd, адрес и т. Д. –

ответ

1

не имеет смысла посылать так много параметров, я бы отправить объект:

public class UserInfo { 
    private String colTestCaseName; 
    private String coldUserName; 
    private String colPassword; 
    public String getColTestCaseName() { 
     return colTestCaseName; 
    } 
    public void setColTestCaseName(String colTestCaseName) { 
     this.colTestCaseName = colTestCaseName; 
    } 
    public String getColdUserName() { 
     return coldUserName; 
    } 
    public void setColdUserName(String coldUserName) { 
     this.coldUserName = coldUserName; 
    } 
    public String getColPassword() { 
     return ColPassword; 
    } 
    public void setColPassword(String colPassword) { 
     this.colPassword = colPassword; 
    } 
} 

вызова метод:

UserInfo userInfo = new UserInfo(); 
//Add credentials 
userInfo.setColUsername("user1"); 
.... 
Login_Action.ExecuteLoginAction(driver, userInfo);