Selenium + java

该博客介绍了Selenium自动化测试框架的基础组件,包括封装的常用函数,如自动化测试注解、环境变量获取、浏览器类型识别、用户管理、驱动创建等。通过抽象基类和辅助工具类,实现了测试用例的初始化和清理工作,支持不同环境和用户的测试数据管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 封装常用函数。

        automation.base.cons   // 收集多处会使用到的常量, 当需要修改时,只需修改此处。

public class BaseCons{

public static final String DEBUG_MODE = "debug";

............

}

automation.base.core  // 把常用操作收集到这个类中, 比如 获取环境变量, 浏览器类型等, 关于 抽象类可以参考 : http://blog.youkuaiyun.com/oh_mourinho/article/details/8216023

public  abstract class Abstract {

@BeforeMethod(alwaysRun = true)

public void beforeMethod(ITestContext context, Method method){

try{

logger.info("[SetUp]Test Case ID:" + method.getName() + "====BaseBeforeMethod start");

//Get environment
logger.info("[SetUp]Test Case ID:" + method.getName() + "====current env: " + Util.getEnvStr());

//Get user type
String userType = null;
AutomationAnnotation annotation = method.getAnnotation(AutomationAnnotation.class);
if (annotation != null) {
userType = annotation.userType();
}
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Get user type successfully.");

//Get user by type

UserBean user = UserManager.getUser(userType);
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Get the user you want successfully.");

//Add user into TestObjectManger
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Add the user into TestObjectManager...");
TestObjectManager.addUser(method.getName(), user);
logger.info("[SetUp]Add test case ID: " + method.getName() + ", user: "+TestObjectManager.getUser(method.getName())+" into TestObjectManager successfully.");
// Get browser info.
String browserType = Util.getBrowserType();
String browserVersion = Util.getBrowserVersion();
String platform = Util.getPlatform();
logger.info("[SetUp]Test Case ID:" + method.getName() + "====browserType: " + browserType + ", verison: "
+ browserVersion + ", platform: " + platform);

// Create driver by type
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Creating driver...");
WebDriver driver = SeleniumUtil.createDriver(browserType, browserVersion, platform, method.getName());
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Create driver successfully.");

logger.info("[SetUp]Test Case ID:" + method.getName() + "====Add driver into TestObjectManager...");
TestObjectManager.addDriver(method.getName(), driver);
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Add driver into TestObjectManager successfully.");

// log node to help to debug on Grid
if (Util.isUseGrid()) {
logger.info("[SetUp]Test Case ID:" + method.getName() + "===current node: "
+ Util.GetNodeName(getDriver(method)));
}

String owner = this.getOwner(method);
TestObjectManager.addOwner(method.getName(), owner);
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Add owner into TestObjectManager...");

// Maximize browser window
driver.manage().window().maximize();

String homeURL = Environment.getHomePageUrl();
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Navigating to URL: " + homeURL);
driver.get(homeURL);

// if the URL is failed to forward, refresh the browser again
while (driver.getCurrentUrl().contains("undefined")) {
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Re-Navigating to URL: " + homeURL);
driver.get(homeURL);
}
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Navigate to URL: " + homeURL + " sucessfully.");
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Loading test data...");
this.initTestData(context, method);
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Load test data successfully.");
logger.info("[SetUp]Test Case ID:" + method.getName() + "====BaseBeforeMethod end");
} catch (Exception ex) {
logger.error("[SetUp]-{BaseBeforeMethod}-Test Case ID:" + method.getName() + "====" + ex.getMessage());
logger.error("[SetUp]-{BaseBeforeMethod}-Test Case ID:" + method.getName() + "====The stracktrace of this case====");
ex.printStackTrace();
Assert.fail("[SetUp]-{BaseBeforeMethod}-Test Case ID:" + method.getName() + "====ERROR:Fail to SetUp");
}
}

public String getOwner(Method method) {
String result = "";
AutomationAnnotation annotation = method.getAnnotation(AutomationAnnotation.class);
if (annotation != null) {
result = annotation.owner();
}
return result == null ? "" : result;
}

private void initTestData(ITestContext context, Method method) {
String testcaseId = method.getName();
List<TestDataBean> data = TestDataUtil.getTestData(testcaseId);
TestObjectManager.addTestData(method.getName(), data);
}
public UserBean getUser(Method method) {
return TestObjectManager.getUser(method.getName());
}
public String getTestDataByKey(String testCaseId, String parameter) {
List<TestDataBean> data = TestObjectManager.getTestData(testCaseId);
String env = Environment.getEnvironmentBean().getType().toLowerCase();
for (TestDataBean bean : data) {
if (bean.getParameter().equals(parameter)) {
Map<String, String> dataMap = bean.getDataMap();
return dataMap.get(env.toLowerCase());
}
}
return null;
}
public WebDriver getDriver(Method method) {
return TestObjectManager.getDriver(method.getName());
}
public void closeBrowserSession() throws IOException {
if(Environment.getDefaultPlatform().contains("WINDOWS")){
Runtime.getRuntime().exec("taskkill /F /IM ChromeDriver*");
Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer*");
Runtime.getRuntime().exec("taskkill /F /IM Firefox.exe");
}else{
Runtime.getRuntime().exec("pkill chromedriver");
Runtime.getRuntime().exec("pkill firefox");
}
}
@AfterMethod(alwaysRun = true)
public void afterMethod(ITestContext context, Method method) {
logger.info("[TearDown]Test Case ID:" + method.getName() + "====BaseAfterMethod start");
try {
WebDriver driver = this.getDriver(method);
logger.info("[TearDown]Test Case ID:" + method.getName() + "====URL: " + driver.getCurrentUrl());
//Close windows one by one
Set<String> handles = driver.getWindowHandles();
for(int i=handles.size()-1;i>=0;i--){
driver.switchTo().window(handles.toArray()[i].toString());
driver.close();
}
//closeBrowserSession();
driver.quit();
logger.info("[TearDown]Test Case ID:" + method.getName() + "====All browsers quit successfully on Windows.");
} catch (Exception ex) {
logger.error("[TearDown]-{BaseAfterMethod}-Test Case ID:" + method.getName() + "====" + ex.getMessage());
logger.error("[TearDown]-{BaseAfterMethod}-Test Case ID:" + method.getName() + "====The stracktrace of this case====");
ex.printStackTrace();
logger.error("[TearDown]-{BaseAfterMethod}-Test Case ID:" + method.getName() + "====ERROR:Fail to TearDown");
}

logger.info("[TearDown]Test Case ID:" + method.getName() + "====BaseAfterMethod end");
}
}

}

}

}

automation.base.core.annotation //

@Target({ElementType.TYPE,ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Inherited
public @interface AutomationAnnotation {
public String owner() default ""; //test case owner
public String userType() default "";//select a user for testcase
}

automation.base.core.listener

public class BaseSuiteListener implements ISuiteListener{}

public class BaseTestCaseListener extends TestListenerAdapter{}

public class RetryAnalyzer implements IRetryAnalyzer{}

public class RetryListener implements IAnnotationTransformer {}

automation.base.core.report

public class DefaultReportSolution{}

public class PdfReport{}

automation.base.core.testdata

public class TestDataUtil {}

automation.base.core.users

public class UserManager {
private static Logger logger = Logger.getLogger(UserManager.class);
private static Set<UserBean> userSet = null;
private static List<UserBean> inUseList = null;
private static final Object collectionLock = new Object();
static {
List<UserBean> list = Environment.getAllUser();
if (list.size() == 0) {
list = get100MockUsers();
}
userSet = new HashSet<UserBean>(list.size());
inUseList = new ArrayList<UserBean>(list.size());
try {
userSet.addAll(list);
} catch (Exception ex) {
logger.info("[UserManager--init]: Init user failure ====" + ex.getMessage());
}
}
private static List<UserBean> get100MockUsers() {
List<UserBean> mockUsers = new ArrayList<UserBean>();
for (int i = 0; i < 100; i++) {
UserBean user = new UserBean();
user.setName(Integer.toString(i));
user.setPwd(Integer.toString(i));
user.setType("");
mockUsers.add(user);
}
return mockUsers;
}

public static UserBean getUser(String userType) {}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值