【问题标题】:selenium pass parameter to @Test from pageObjects Common functionselenium 将参数从 pageObjects 常用函数传递给 @Test
【发布时间】:2015-02-04 08:27:49
【问题描述】:

我正在使用 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; 部分? 感谢您的帮助。

【问题讨论】:

    标签: java selenium selenium-webdriver apache-poi parameter-passing


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨@Mrunal Gosar,请在下面查看我对@AfterMethod的回复
    • 您的第一个解决方案失败了,因为您仅在一个 @Test 中调用这两种方法,如果您想分别报告两种方法的状态,则需要进行单独的测试。在您的第二个解决方案中 colName 是您想要记录该测试状态的值。第 5 个参数是测试的结果或状态。您需要将签名设置为 toCheck_isUserLogin(FilePath_TestResult, TestCaseName)
    • 嗨@Mrunal Gosar,我尝试过toCheck_isUserLogin(FilePath_TestResult, TestCaseName),但我在SuiteUtility.WriteResultUtility 得到java.lang.NullPointerException。我做静态引用的方式可能不正确吗?请指教,谢谢。
    • 您需要在调试模式下运行您的代码并确定哪个参数为空。我相信你知道如何在 eclipse/ 中以调试模式运行你的代码
    • 嗨@Mrunal Gosar,两个参数都是null
    猜你喜欢
    • 2013-04-19
    • 2013-01-27
    • 1970-01-01
    • 2023-03-09
    • 2016-10-25
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多