博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS及Android自动化实践
阅读量:6430 次
发布时间:2019-06-23

本文共 4592 字,大约阅读时间需要 15 分钟。

App:网易看游戏(Xone)
  工具:appium 1.0
  Appium 1.0较以往的版本有了比较大的变化。
  
1.xpath路径改变
  Before:/window[1]/navigationBar[1]/button[4]
  Current://UIAApplication[1]/UIAWindow[1]/UIANavigationBar[1]/UIAButton[4]
  2.Capability参数名称改变
Before:
desiredCapabilities.setCapability(CapabilityType.PLATFORM, "iOS");
desiredCapabilities.setCapability(CapabilityType.VERSION, "7.0");
Current:
desiredCapabilities.setCapability("platformVersion", "7.0");desiredCapabilities.setCapability("platformName", "iOS");
  
3.Appium客户端UI变化(提供更丰富的参数选择)
  4.稳定性提供,客户端未崩溃过。
  等等
 
 接下来简单讲下具体实践过程吧
  1.项目结构,如图
  page:获取UI元素类
  :用例类,即类
  util:封装大部分的公共方法
  assertion:断言类
  以testng框架为基础,ant编译执行,实现了每日构建运行。
2.编码,贴下通行证登录模块的代码,供参考
  测试类:PassportLogin
public class PassportLogin extends BaseTest {
private static Logger log = Logger.getLogger(PassportLogin.class);
@DataProvider(name = "passportLoginData")
public static Object[][] passportLoginData() {
return new Object[][] {
{ "正确的网易通行证登录", "xxxxx@163.com", "xxxxx", "" },
{ "非网易账号的网易通行证登录", "xxx@qq.com", "xxxx", "" },
{ "网易通行证登录,密码错误", "xxxx@163.com", "xxx",
"用户名或密码错误" },
{ "不输入账号和密码", "", "", "用户名不能为空" },
{ "不输入密码", "xxx@163.com", "", "密码不能为空" },
{ "不输入账号", "", "xxxx", "用户名不能为空" },
{ "错误的网易通行证登录", MyRandom.getRandomString(10) + "@163.com",
MyRandom.getRandomString(6), "用户名或密码错误" } };
}
@BeforeClass
public void setUp() {
driver = new Orange();
mainPage = new MainPage(driver);
account = new Account(driver);
as = new AssertSettings(driver);
usPage = new UserSettingsPage(driver);
homePage = new HomePage(driver);
mainPage.enterMainPage();
mainPage.enterLogin();
account.logoutTrue();
}
@AfterClass
public void tearDown() {
driver.quit();
}
@AfterMethod
public void end() throws InterruptedException {
log.info("-------------------------------------------------------------------");
}
@Test(dataProvider = "passportLoginData")
public void passportLoginTest(String testName, String passport,
String password, String errorCode) throws InterruptedException {
log.info("测试内容:" + testName);
mainPage.enterLogin();
account.login(passport, password);
if (errorCode != "") {
boolean b = as.assertLogin(errorCode);
driver.sleep(3000);
mainPage.flickToRight();
mainPage.closePage();
Assert.assertTrue(b);
} else {
mainPage.enterLogin();
homePage.settingsClick();
usPage.passportClick();
account.logout();
}
}
}
由于涉及到了多个page,这里只贴部分Page类,如Account类,用于获取登录操作
public class Account extends BasePage {
/**
* @Title: Account
* @Description: TODO
* @param @param driver
* @throws
*/
public Account(Orange driver) {
super(driver);
// TODO Auto-generated constructor stub
}
/**
* @Title: login
* @Description: TODO
* @param @param driver
* @return void
* @throws
*/
public void login() {
driver.clickOnElement(By.name("网易通行证登录"));
driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATextField[1]"),
PropertiesHandle.readValue("passport_2"));
driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIASecureTextField[1]"),
PropertiesHandle.readValue("password"));
driver.clickOnElement(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[1]"));
}
/**
* @Title: login
* @Description: TODO
* @param @param driver
* @param @param passport
* @param @param password
* @return void
* @throws
*/
public void login(String passport, String password) {
driver.clickOnElement(By.name("网易通行证登录"));
driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATextField[1]"), passport);
driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIASecureTextField[1]"), password);
driver.clickOnElement(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[1]"));
}
/**
* @Title: login
* @Description: TODO
* @param @param type
* @param @param passport
* @param @param password
* @return void
* @throws
*/
public void login(String type, String passport, String password) {
driver.clickOnElement(By.name(type));
driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATextField[1]"), passport);
driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIASecureTextField[1]"), password);
driver.clickOnElement(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[1]"));
}
/**
* @Title: login
* @Description: TODO
* @param @param type
* @return void
* @throws
*/
public void login(String type) {
driver.clickOnElement(By.name(type));
}
/**
* @Title: logout
* @Description: TODO
* @param @param driver
* @return void
* @throws
*/
public void logout() {
driver.clickOnElement(By.name("退出当前帐号"));
driver.clickOnElement(By.name("确定"));
}
}
  主要的公共类:Orange,主要借鉴了孔庆云同学已经封装好的方法,并进行一些改进后直接使用,方便快捷。
  目前Appium已经到了1.1版本,这款自动化工具还是不错的,跨平台,跨语言支持都比较好,稳定性也在逐步提升。
最新内容请见作者的GitHub页:http://qaseven.github.io/

转载地址:http://eriga.baihongyu.com/

你可能感兴趣的文章
[python] <type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xe5 in position 9
查看>>
java中的io
查看>>
『AA』AutoAnchor自动猫
查看>>
WMF 3.0 RTM(包含PowerShell 3.0 )业已发布
查看>>
HDU-4403 A very hard Aoshu problem 枚举
查看>>
Java的网络编程初识
查看>>
C#获取本机所有IP地址(包括局域网和本机外网IP)
查看>>
POJ 3133 Manhattan Wiring(插头DP)
查看>>
GNU make manual 翻译( 一百五十四)
查看>>
分析Autofac如何实现Controller的Ioc(Inversion of Control)
查看>>
使用jQuery开发一个响应式超酷整合RSS信息阅读杂志
查看>>
(转)C#中调用ORACLE的PACKAGE里方法和存储过程的应用
查看>>
今天了解了四个知识点
查看>>
MyISAM vs InnoDB:MySQL存储引擎详解
查看>>
查找算法(I) 顺序查找 二分查找 索引查找
查看>>
第46周星期一开写总体设计
查看>>
python 问题集合
查看>>
豌豆荚工程师谈其新版应用搜索技术
查看>>
螺旋阵(递归和非递归)
查看>>
我的爷爷(知识渊博的下乡知青)
查看>>