iOS及Android自动化实践

摘要: App:网易看游戏(Xone)   工具:appium 1.0   Appium 1.0较以往的版本有了比较大的变化。   1.xpath路径改变   Before:/window[1]/navigationBar[1]/button[4]   Current://UIAApplication[1

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元素类

  test:用例类,即测试

  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/

如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

原文链接

转载于:https://my.oschina.net/u/3471461/blog/1476451

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习移动端自动化测试需要掌握以下几个方面的知识和技能: 1. 移动应用开发基础:了解移动应用的基本原理、生命周期和开发流程。掌握至少一种移动应用开发平台(如AndroidiOS)的开发技术和相关工具。 2. 移动应用测试基础:了解移动应用测试的基本原理和流程。学习常见的移动应用测试方法,如功能测试、性能测试、兼容性测试等。 3. 自动化测试基础:掌握自动化测试的基本概念和原理,了解自动化测试的优势和适用场景。学习常见的自动化测试框架和工具,如Appium、XCUITest、Espresso等。 4. 编程语言:选择一种编程语言作为自动化测试的开发语言,如Python、Java等。掌握该语言的基本语法和常用库,以便编写自动化测试脚本。 5. 移动端自动化测试工具:学习使用移动端自动化测试工具,如Appium。了解工具的安装、配置和使用方法,以及如何编写和执行自动化测试脚本。 6. 测试框架和设计模式:了解常见的测试框架和设计模式,如Page Object模式、数据驱动测试等。这些可以帮助您组织和管理自动化测试代码,提高测试脚本的可维护性和可扩展性。 7. 实践和项目经验:通过实际的项目练习和实践,不断积累移动端自动化测试的经验和技巧。可以参与开源项目、参加测试比赛或者自己搭建一个小型的测试项目来进行实践。 除了学习上述知识和技能,您还可以参考相关的书籍、在线教程、博客和论坛,与其他从业者交流和分享经验。不断学习和实践是提高移动端自动化测试能力的关键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值