selenium 将参数从 pageObjects 传递给 @Test 常用函数

selenium pass parameter to @Test from pageObjects Common function

我正在使用 Selenium Webdriver 开发自动化框架。

对于每个测试用例,我都有很多项目要验证(例如,用户是否登录到 Web 应用程序,页面上是否存在性别复选框)

然后它将使用Excel WriteResultUtility根据预定义的列名将结果写入Excel。

我有20个测试用例,我不想每次都在每个测试用例中编写代码。 (尽量减少代码,方便日后维护)

// Selenium 主测试脚本

public class MyTestCase_01 extends SuiteBase{
Read_XLS FilePath = null;
Read_XLS FilePath_TestResult = null; //Location to store Output File
String TestCaseName = null; 
static int DataSet=-1;
public WebDriver driver;            

@BeforeTest
public void checkCaseToRun() throws IOException{        

    FilePath_TestResult = MyTestCase_0001_TestResult; //Each test case will have own Output file
    TestCaseName = this.getClass().getSimpleName(); 
}

@Test(dataProvider="MyTestCase_0001Data")
public void MyTestCase_0001Test(String ColTestCaseName, String ColUsername, String ColPassword) throws Exception{

    DataSet++;

    // add arguments to match  check_isUserLoggedIn(Read_XLS, String, String, int, String)
    Login_Page.toCheck_isUserLogin(FilePath_TestResult, TestCaseName);  
    Register_Page.toCheck_isGenderChkbxExists(FilePath_TestResult, TestCaseName);

// pageObjects Login_Page.java(我想将其用作通用函数)(但我在 FilePath_TestResultTestCaseName 变量上遇到问题,因为它对每个测试来说都是不同的值例)

public class Login_Page extends BaseClass{

    private static WebElement element = null;
    public static Read_XLS FilePath_TestResult = null;
    public static String TestCaseName = null;   
    static boolean Testfail = false;
    static int DataSet = -1;

    public Login_Page(WebDriver driver){
            super(driver);
    }
    public static WebElement toCheck_isUserLogin(Read_XLS xls, String sheetName, String ColName, int rowNum, String Result) throws Exception{
        try{
            Boolean isUserLogin = driver.findElements(By.xpath(Object.getProperty("verify_isUserLogin"))).size()!= 0;               
            if (isUserLogin == true){
                SuiteUtility.WriteResultUtility(FilePath_TestResult, TestCaseName, Constant.COL_IS_USER_LOGIN, 
                        DataSet+1, Constant.KEYWORD_PASS);
                Testfail = false;                   
            }else{
                SuiteUtility.WriteResultUtility(FilePath_TestResult, TestCaseName, Constant.COL_IS_USER_LOGIN, 
                        DataSet+1, Constant.KEYWORD_FAIL);
                Testfail = true;
            }
        }catch(Exception e){
            throw(e);
        }
        return element;
    }
    public static WebElement toCheck_isGenderChkbxExists(Read_XLS xls, String sheetName, String ColName, int rowNum, String Result) throws Exception{
        try{
            Boolean isGenderChkbxExists = driver.findElements(By.xpath(Object.getProperty("verify_isGenderChkbxExists"))).size()!= 0;
            if (isGenderChkbxExists == true){
                SuiteUtility.WriteResultUtility(FilePath_TestResult, TestCaseName, Constant.COL_IS_GENDER_CHKBX_EXISTS,
                    DataSet+1, Constant.KEYWORD_PASS);
                    Testfail = false; 
            }else{
                SuiteUtility.WriteResultUtility(FilePath_TestResult, TestCaseName, Constant.COL_IS_GENDER_CHKBX_EXISTS,
                    DataSet+1, Constant.KEYWORD_FAIL);
                Testfail=true;
            }
        }catch(Exception e){
            throw(e);
        }
        return element;
    }

//SuiteUtility.java

public static boolean WriteResultUtility(Read_XLS xls, String sheetName, String ColName, int rowNum, String Result){            
    return xls.writeResult(sheetName, ColName, rowNum, Result);         
}

//SuiteBase.java(初始化测试数据文件)

public class SuiteBase {    

public static Read_XLS MyTestCase_01_TestResult = null;
public static Read_XLS MyTestCase_02_TestResult = null;
public static Read_XLS MyTestCase_03_TestResult = null;
public static WebDriver driver = null;


//Initialize Test Data file.
public void init() throws IOException{

    // Test Result location
    MyTestCase_01_TestResult = new Read_XLS(System.getProperty("user.dir")+"\TestOutput\MyTestCase_01.xls");
    MyTestCase_02_TestResult = new Read_XLS(System.getProperty("user.dir")+"\TestOutput\MyTestCase_02.xls");
    MyTestCase_03_TestResult = new Read_XLS(System.getProperty("user.dir")+"\TestOutput\MyTestCase_03.xls");

我的目标是将其作为通用函数,以便可以重复使用并最小化代码。

然而,FilePath_TestResult(参考SuiteBase.java)是每个测试用例的不同变量。

(我在 SuiteUtility.WriteResultUtility 得到 java.lang.NullPointerException) 我是否以正确的方式声明 public static Read_XLS FilePath_TestResult = null; 部分? 感谢您的帮助。

为什么不将参数传递给以下方法

Login_Page.toCheck_isUserLogin(String...args);   
Register_Page.toCheck_isGenderChkbxExists(String...args);

并控制您要测试的参数? 我还建议您查看@AfterMethod,您可以在其中将先前测试的结果写入您想要的列。 如果您需要进一步的帮助,请告诉我。