自动化之旅--Appium

  • 不依赖源码
  • 使用任何 WebDriver 兼容的语言来编写测试用例。比如 Java, Objective-C, JavaScript with Node.js (in both callback and yield-based flavours), PHP, Python, Ruby, C#, Clojure, 或者 Perl.
  • 不需要重新编译APP

如果有不清楚WebDriver的小伙伴马上在Appium架构介绍中会有说明.

Appium理念

  1. 你无需为了自动化,而重新编译或者修改你的应用。
  2. 你不必局限于某种语言或者框架来写和运行测试脚本。
  3. 一个移动自动化的框架不应该在接口上重复造轮子。(移动自动化的接口应该统一)
  4. 无论是精神上,还是名义上,都必须开源。

Appium架构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

iOS: 苹果的UIAutomation
Android 4.2+: Google的UiAutomator
Android 2.3+: Google’s Instrumentation. (由单独的项目Selendroid提供支持 )

Appium 1.6版本以上增加了UiAutomator2

为了满足上面跨平台,把这些三方框架封装成一套API —— WebDriver Api(客户端到服务端的协议)

事实上 WebDriver 已经成为 web 浏览器自动化的标准,也成了 W3C 的标准 —— W3C Working Draft,所以Appium在原有基础上扩充了移动自动化相关的API.

投资 WebDriver 意味着你可以押宝在一个已经成为标准的独立,自由和开放的协议。你不会被任何专利限制。

核心架构: Appium使用C/S架构,运行时候Service端会监听Client端发送的命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP 响应中返还给客户端.

基于这架构可以做什么?

  • 可以用任何实现了该客户端的语言来写测试代码
  • 可以把服务端放在不同的机器上
  • 可以只写测试代码,然后利用类似 saucelabs 云服务来解释命令.

下图解释了云服务的具体作用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Appium 使用

服务端

  • 安装Appium服务器

npm install -g appium
npm install -g appium-doctor
appium-doctor

其中appium-doctor用来检查电脑是否缺少相关依赖.当所有都是对勾表示Appium环境配置完毕,如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 开启appium服务器:

appium --address 127.0.0.1 --port 4723 --log “/Users/mio4kon/Desktop/
appium.log” --log-timestamp --local-timezone --session-override

客户端

再次强调 Appium 支持各种语言,这里我选择JAVA.如果觉得JAVA语法不够简洁或者不熟悉,可以使用你所熟悉的语言.

创建 MAVEN/Gradle 工程:

创建工程,并加入下面依赖:

io.appium java-client 5.0.0-BETA2 org.seleniumhq.selenium selenium-java org.seleniumhq.selenium selenium-java 3.0.1

这样Appium 客户端的依赖就引入成功了.

Capabiltiy配置:

每个Test的基类中定义setUp方法,并设置Capabiltiy以前其他的初始化操作:

DesiredCapabilities capabilities = new DesiredCapabilities ();
capabilities.setCapability (MobileCapabilityType.DEVICE_NAME, deviceName);
capabilities.setCapability (MobileCapabilityType.PLATFORM_NAME, platformName);
capabilities.setCapability (MobileCapabilityType.PLATFORM_VERSION, platformVersion);
capabilities.setCapability (MobileCapabilityType.APP, apkPath);
capabilities.setCapability (AndroidMobileCapabilityType.APP_PACKAGE, appPackage);
capabilities.setCapability (AndroidMobileCapabilityType.APP_ACTIVITY, appActivity);
capabilities.setCapability (MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);

这里我使用的是 TestNG 中的Parameters注释来配置参数.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TestNG 又是什么鬼? 简单来说TestNG是java的一个测试框架,类似JUnit但功能更加强大,使用也方便.

TestNG

利用TestNg的一些注释,做准备化和收尾操作.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的setUp方法我就使用了BeforeClassParameters这两种注释.

@BeforeClass
@Parameters({“driverName”, “url”, “deviceName”, “platformName”, “platformVersion”, “apkPath”, “appPackage”, “appActivity”})
public void setUp(String driverName, String url, String deviceName,
String platformName, String platformVersion, String apkPath,
String appPackage, String appActivity) throws Exception {
log.i (TAG, “BeforeClass”);
driver = setRemoteDriver (driverName, url, deviceName, platformName, platformVersion, apkPath, appPackage, appActivity);
actions = ElementActions.getInstance ().init (driver);
assertActions = actions.getAssertActions ();
Screenshot.getInstance ().init (driver);
prepare ();
}

同样在在AfterClass后,进行了driver的退出.

正常情况下我们写测试用例是下面这种情况:

一个TestClass中包含多个TestMethod.如果每个TestMethod都相互独立,需要重新运行APP显然非常耗时,所以这里我将每一个TestClass相互独立,而其中的TestMethod又相互依赖,执行顺序通过TestNG的XML来控制.如下:

但是有些情况如果需要TestMethod也相互独立的话,可以利用AfterMethod注释.

@AfterMethod
public void afterMethod() {
driver.resetApp ();
}

编写用例

查找元素

定位方式

查找元素可以通过很多方法(可以通过UIAutomatorViewer获取页面的id,name等信息):

  • id
  • name
  • className
  • xpath
  • uiautomator

高级定位

  • xpath查找登录按钮:

by.xpath (“//button[@name=‘login’]”)

xpath实例教程

  • uiautomator的API滚动查找:

String rule = “new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().textContains(”" + locator.value + “”))"
WebElement cl = driver.findElementByAndroidUIAutomator(rule));

其实就是用如果用uiautomator来写:

new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().textContains(value));

uiautomator API

元素管理

为了让测试用例能够方便复用,简化写用例的时间,必要的封装是不可少的. 利用 Page Object 模式将页面上的元素进行封装.这样所有 Test 只需要简单的控制页面元素即可.

  • 可以使用yaml文件进行管理页面元素:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后在BasePage中将yaml解析封装成Locator对象.并保存到集合.
这样所有的PageObject都可以通过下面方法来定位元素.

protected Locator getLocator(String locatorName) {
checkNotNull (locatorName);
Page page = getPage ();
List locators = page.locators;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

[外链图片转存中…(img-8Hg8vs6K-1712034978727)]

[外链图片转存中…(img-2EN8XpPN-1712034978727)]

[外链图片转存中…(img-mfZ7OOAI-1712034978727)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值