- 不依赖源码
- 使用任何 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理念
- 你无需为了自动化,而重新编译或者修改你的应用。
- 你不必局限于某种语言或者框架来写和运行测试脚本。
- 一个移动自动化的框架不应该在接口上重复造轮子。(移动自动化的接口应该统一)
- 无论是精神上,还是名义上,都必须开源。
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
方法我就使用了BeforeClass
和Parameters
这两种注释.
@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’]”)
- 用
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));
元素管理
为了让测试用例能够方便复用,简化写用例的时间,必要的封装是不可少的. 利用 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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件
[外链图片转存中…(img-8Hg8vs6K-1712034978727)]
[外链图片转存中…(img-2EN8XpPN-1712034978727)]
[外链图片转存中…(img-mfZ7OOAI-1712034978727)]