PO思想的实战 JavaAppium
说到自动化测试,大家提到的往往是PO设计思想。我简单说一下我对PO设计思想的理解:
什么是PO思想?
PageObject是一种测试设计模式减少冗余的代码和对代码进行管理,分离测试步骤及测试对象。
PO的好处
将测试用例及测试对象分离,提高用例可维护性,集中管理元素对象,代码可复用,降低成本,不同PO之间没有交叉,可以支持并行开发。
以上为百度百科的说明,通俗点就是按照MVC的原则,实现界面Page,功能逻辑Controller,测试数据Data的分离,降低测试用例的复杂度和维护难度。看过上一篇文章的现在应该就会明白分别对应的项目目录中的page,controller,data目录。
下面的我抖音为例,说明一下Page,Controller,Pager的写法
- 我们需要初始化一下项目:
public class Application extends Bootstrap{
//系统初始化
@Override
public void init() {
InputStream io = getClass().getResourceAsStream("app.properties");
initConfig(io);
}
//注册数据模板
@Override
public void register() {
APIDataCenter.getShareInstance().register(DySearchcKey.class);
APIDataCenter.getShareInstance().upload();
}
}
数据中心下一篇文章会讲到。
- 编写程序界面:
@SwipePage(pages = 0)
public class DyIndexPage extends BasePage {
@AndroidElement(uiText = "关注",time = 10)
public MobileElement follow;
@AndroidElement(uiText = "推荐",time = 10)
public MobileElement recommend;
@AndroidElement(uiResourceId = "com.ss.android.ugc.aweme:id/bfq",time = 10)
public MobileElement search;
public DyIndexPage() {
}
public DyIndexPage(AppiumDriver driver) {
super(driver);
}
}
通过注解的方式查找元素,@SwipePage 解决元素不在首屏的问题,@AndroidElement用来查找具体元素,可以通过uitext,id,resource,class等 定位的具体用法可以去API网站:http://test.igood.wang
重点:界面类必须有一个无参的构造函数。
3.编写控制器
public class DyIndexController extends BaseController<DyIndexPage> {
public DyIndexController(AppiumDriver driver) {
super(driver);
}
}
4.编写测试用例
public class DyTest extends BaseTest {
@Test
public void swipDy(){
DyIndexController indexController = new DyIndexController(driver);
Swipe.SwipeUp(driver,10);
}
@Override
public String appType() {
return "android";
}
@Override
public Bootstrap bootstrap() {
return new Application();
}
}
效果如下:
https://igood.oss-cn-beijing.aliyuncs.com/DyExample.mp4
本例只罗列了基本结构,控制器中并未添加具体业务逻辑。以后会逐渐丰富起来。
Demo下载地址:https://igood.oss-cn-beijing.aliyuncs.com/DYExample.zip
微信号:CompanyAiHelper