安卓自动化测试:Robotium(二)page object 模式完善测试框架

1、目前比较流行的设计模式就是page object,page object就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的提现java的面向对象和封装特性
2、具体思想:测试框架分为四大类
1)编写抽象父类:建立Utils包,存放工具类,用于自动完成唤醒手机、解锁、登录等前置操作,之后的用例只需继承抽象父类即可
2)提取控件ID类:在工程中建立从com.pacagename.test.elements包用例存放控件ID类。命名一般以Element开头,后面接Activity结尾,举个栗子:ElementLoginActivity,代码如下:
package com.coolwi.km.user.elements;

import android.R;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.coolwi.km.user.test.myOperationFun;
import com.robotium.solo.Solo;

public class ElementsLoginActivity {
private Solo solo;
private EditText login_numEditText,noteEditText;
private Button bt_loginButton;
private LinearLayout delete_numButton,login_ll_wexin;
private TextView gain_note;

public ElementsLoginActivity(Solo solo) {
this.solo=solo;
}

public void initViews(){
try {
login_numEditText=(EditText) clickById("login_numEditText");
noteEditText=(EditText) clickById("noteEditText");
delete_numButton=(LinearLayout) clickById("delete_num");
bt_loginButton=(Button) clickById("bt_login");
gain_note=(TextView) clickById("gain_note");
login_ll_wexin=(LinearLayout) clickById("login_ll_wexin");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*noteEditText=(EditText)solo.getCurrentActivity().findViewById(R.id.noteEditText);
delete_numButton=(LinearLayout)solo.getCurrentActivity().findViewById(R.id.delete_num);
bt_loginButton=(Button)solo.getCurrentActivity().findViewById(R.id.bt_login);
gain_note=(TextView)solo.getCurrentActivity().findViewById(R.id.gain_note);
login_ll_wexin=(LinearLayout)solo.getCurrentActivity().findViewById(R.id.login_ll_wexin); */
}

public EditText getlogin_numEditText(){
return login_numEditText;
}

public EditText getnoteEditText() {
return noteEditText;
}

public LinearLayout getdelete_numButton(){
return delete_numButton;
}

public Button getbt_loginButton() {
return bt_loginButton;

}

public void enterlogin_num(String text) {
solo.enterText(login_numEditText, text);
}

public void enternote(String text) {
solo.enterText(noteEditText, text);
}

public void enterbt_loginButton(){
solo.clickOnView(bt_loginButton);
}

public void clickdelete_numButton(){
solo.clickOnView(delete_numButton);
}

public void clickgain_note() {
solo.clickOnView(gain_note);
}

public void clicklogin_ll_wexin() {
solo.clickOnView(login_ll_wexin);
}

private void clickbt_loginButton() {
// TODO Auto-generated method stub
solo.clickOnView(bt_loginButton);

}
}
3)操作统一入口类:用于操作提取的控件ID类。新建一个UIHeleper类,用于操控所有的控件类。
package com.coolwi.km.user.test;

import com.coolwi.km.user.elements.ElementsLoginActivity;
import com.robotium.solo.Solo;

public class UIHelper {
private Solo solo=null;
private ElementsLoginActivity ElementsLoginActivity;

public UIHelper() {
// TODO Auto-generated constructor stub
}

public UIHelper(Solo solo){
this.solo=solo;
}
public Solo getsolo(){
return solo;
}

public ElementsLoginActivity getElementsLoginActivity() {
if(ElementsLoginActivity==null){
ElementsLoginActivity=new ElementsLoginActivity(solo);
}
ElementsLoginActivity.initViews();

return ElementsLoginActivity;

}
}
4)更新抽象父类和测试用例:用于更新抽象父类,并根据需求更新对应的测试用例。举个栗子:
a、基本类如下:
package com.coolwi.km.user.test;

import android.test.ActivityInstrumentationTestCase2;

import com.robotium.solo.Solo;

public class BasicTestCase extends ActivityInstrumentationTestCase2 {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.coolwi.km.user.activity.SplashActivity";
@SuppressWarnings("unused")
private static Class<?> launchActiviClass;
static{
try {
launchActiviClass=Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);// TODO: handle exception
}
}

@SuppressWarnings("unchecked")
public BasicTestCase() throws Exception{
super(launchActiviClass);
}
public Solo solo;
public UIHelper uiHelper=null;
public void init() {
// TODO Auto-generated method stub
solo=new Solo(getInstrumentation(),getActivity());
uiHelper=new UIHelper(solo);
}
}
b、登录类继承基本类,并成功登录
package com.coolwi.km.user.test;

public class TestCase1 extends BasicTestCase {

public TestCase1() throws Exception {
super();
// TODO Auto-generated constructor stub
}

@Override
protected void setUp() throws Exception {
super.setUp();
}

@SuppressWarnings("unused")
private void testTestCase1() {
// TODO Auto-generated method stub
// uiHelper.getElementsLoginActivity().
uiHelper.getElementsLoginActivity().enterlogin_num("15088132074");
uiHelper.getElementsLoginActivity().enternote("159753");
uiHelper.getElementsLoginActivity().enterbt_loginButton();

}

}

原文地址:https://www.cnblogs.com/LinxiHuang/p/9246768.html

时间: 2024-10-02 13:49:06

安卓自动化测试:Robotium(二)page object 模式完善测试框架的相关文章

Go语言开发(二十一)、GoMock测试框架

Go语言开发(二十一).GoMock测试框架 一.GoMock简介 1.GoMock简介 GoMock是由Golang官方开发维护的测试框架,实现了较为完整的基于interface的Mock功能,能够与Golang内置的testing包良好集成,也能用于其它的测试环境中.GoMock测试框架包含了GoMock包和mockgen工具两部分,其中GoMock包完成对桩对象生命周期的管理,mockgen工具用来生成interface对应的Mock类源文件.GoMock官网:https://github

Go语言开发(二十)、GoStub测试框架

Go语言开发(二十).GoStub测试框架 一.GoStub简介 GoStub是一款轻量级的单元测试框架,接口友好,可以对全局变量.函数或过程进行打桩.GoStub安装:go get github.com/prashantv/gostub 二.GoStub常用方法 gostub用于在测试时打桩变量,一旦测试运行时,重置原来的值. type Stubs struct { // stubs is a map from the variable pointer (being stubbed) to t

python+selenium自动化软件测试(第7章):Page Object模式

什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页面中的元素对象,比如输入用户名的输入框,输入登陆密码的输入框,登陆按钮,这个页面的url等,而方法,主要是指这个页面可以提供的具体功能.为什么选择POM?我们先看一段简单的代码如下: from selenium import webdriver import time driver = webdri

浅析selenium的page object模式

selenium目前比较流行的设计模式就是page object,那么到底什么是page object呢,简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的提现java的面向对象和封装特性,首先看一下官网的解释: Page Object Design Pattern Page Object is a Design Pattern which has become popular in test automation for enhancing tes

web自动化中的page object模式

一. 原理 将页面的元素定位和元素行为封装成一个page类,实现页面对象和测试用例分离 类的属性:元素定位 类的行为:元素的操作 测试用例:调用所需页面对象中的行为,组成测试用例 二. 好处 1. 当某个页面的元素发生变化,只需要修改该页面对象中的代码即可,测试用例不需要修改 2. 提高代码重用率,结构清晰,维护代码更容易 3. 测试用例发生变化时,不需要或者只需要修改少数页面对象代码即可 三. 分析 (待续...) 原文地址:https://www.cnblogs.com/cnhkzyy/p/

selenium(六)Page Object模式(使用selenium的PageFactory)

PageObject 类 import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class PageObject { private String url="http://www.baidu.com&qu

Page Object设计模式

1. 什么是框架 1.1 定义: 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件(类)及构件(类)实例间交互的方法. 1.2 为什么要搭建自动化测试框架 自动化测试的开发,通常是由自动化测试的需求决定的.这个需求主要包括: 自动化测试更便于实施 解决自动化测试脚本本身存在的问题,如异常处理和场景恢复. 测试易于维护.好的框架,可以减少你在管理维护中所投入的人力物力精力. 可重用性.框架的意义之一就在于可重用吧.所以在框架里,你可以实现一些通用功能,简化脚本开发过程. 

Python+Selenium使用Page Object实现页面自动测试 -未完待续

Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况. 当页面元素id变化时,只需要更改测试页Class中页面的属性即可. Page Object模式是一种自动化测试设计模式,将页面定位和业务操作分开,提高用例的可维护性. unittest是一种单元测试

Page Object 设计模式介绍

Page Object 是 Selenium 自动化测试项目开发实践的最佳设计模式之一,Page Object 的主要体现于对界面交互细节的封装,这样可以使测试案例更关注与业务而非界面细节,提高测试案例的可读性. 1.认识 Paget Object Page Object 设计模式的优点如下: 减少代码的重复: 提高测试用例的可读性: 提高测试用例的可维护性,特别是针对 UI 频繁变化的项目: Paget Object 使用注意: public方法代表Page提供的功能 尽量不要暴露Page的内