1.1PO设计模式
page object(PO)模式是selenium中的一种测试设计模式,Appium也继承了这种设计模式。主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题等),这样在Appium测试页面中可以通过调用页面类来获取页面元素。当页面元素id,class等属性变化时,只需要更改测试页class中的页面属性即可。
方法意义:
- 用公共方法代表UI所提供的功能
- 方法应该返回其他的PageObject或者返回用于测试断言的数据
- 同样的行为不同的结果可以建模为不同的行为
- 不要在方法内加断言
字段意义:
- 不要暴露页面内部的元素给外部
- 不需要建模UI内的所有元素
- 不要自PageObject中加入断言,应该放在测试用例中
1.2PageFactory设计模式
pageFactory的概念和page Object应该类似,属于一种设计模式,是Page Object的扩展。通过注解的方式定位元素对象,需要再构造函数里面调用PageFactory.initElements(driver.this)来初始化PO对象
常用注解:
@AndroidFindBy(id="")
@iOSFindBy(id="")
1.3数据驱动
主要介绍两种测试驱动方式。一种是将测试数据写在测试类中,另外一种写在配置文件里,如CSV,EXCEL,YAML来完成数据驱动
这里可以看下这篇文章 TestNg数据驱动
如果采用CVS等外部文件数据驱动,要做到这两步
- 创建csv文件,将数据填充进去
- 编写csv文件数据读取方法
csv文件工具读取参考如下:
首先创建一个文件路径类:
public class Constants { public static final String filename="regester.csv"; public static final String filepah="src/main/resources/data/"; } 工具类:
public class CSVUtils {
public static Object[][] getCSVData(String filename){
List<Object[]> records=new ArrayList<>();
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(filename),"utf-8"));
String readcord="";
while((readcord= reader.readLine())!=null){
String fileds[]=readcord.split(",");
records.add(fileds);
}
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Object[][] results=new Object[records.size()][];
for (int i=0;i<records.size();i++){
results[i]=records.get(i);
}
return results;
}
public static void outpringt(Object[][] records) {
Arrays.stream(records).map(Arrays::toString).forEach(System.out::println);
}
}