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_TestResult
、TestCaseName
变量上遇到问题,因为它对每个测试来说都是不同的值例)
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,您可以在其中将先前测试的结果写入您想要的列。
如果您需要进一步的帮助,请告诉我。
我正在使用 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_TestResult
、TestCaseName
变量上遇到问题,因为它对每个测试来说都是不同的值例)
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,您可以在其中将先前测试的结果写入您想要的列。 如果您需要进一步的帮助,请告诉我。