Appium是一款开源的App 界面自动化测试软件. C/S架构, 客户端语言支持Java, JavaScript, Python等.
[参考资料]
如何定位元素及代码编写 https://appium.io/docs/en/commands/element/find-elements/index.html
[安装命令行工具]
brew install node # get node.js
npm install -g appium # 安装 appium, 只需一次
appium & # 启动 appium
[运行测试]
[准备安卓测试环境]
由于React Native的一些限制, 目前还无法运行iOS测试. 因此只能针对安卓设备进行自动UI测试.
可以用模拟器AVD, Genymotion(需要先安装VirtualBox)或者真机运行.
启动模拟器或者真机, 用数据线连接到电脑上.
[修改安卓运行参数]
修改文件app/flags.js
, 设置GUI_TEST为true.
// 本文件内容在 Jenkins 自动打包时会被覆盖, release 模式会自动设置为 false, dev 会设置为true, 修改仅对本地环境生效
export const DEBUG = true;
export const GUI_TEST = true;
[打安卓GUI测试包或者直接进入调试模式]
运行命令
chmod +x *.sh
build_android_debug_UI测试.sh
或直接用调试模式, 运行 react-native run-android
注意这时候要同时修改文件 __tests__/Helper.js
(不要提交此文件):
app: process.cwd() + "/android/app/build/outputs/apk/li-debug.apk"
[运行UI测试脚本]
使用WebStorm打开文件__tests__/GUI.android.test.js 或 __tests__/GUI.android.service.test.js
, 点击运行箭头测试单个测试例子.
[使用Android Monitor定位元素的ID或者描述ID]
启动Monitor: android-sdk-macosx/tools/monitor
点击工具栏上的 Dump view UI hierarchy for Automator
Monitor此处对应的resource-id的用法:
let tab = await driver.waitForElementsById("cn.***.***:id/bottom_navigation_container", 15000);
下面的content-desc对应testID, 用法:
let phoneLoginSubmit = await driver.waitForElementsByAccessibilityId('phoneLoginSubmit',20000);
[修改代码给界面加入测试定位ID]
大部分元素默认都是很不好定位的. 所以必须在RN中给元素加入testID:
<Label accessibilityLabel="phoneLoginSubmit" testID="phoneLoginSubmit"
如果一个组件是用自定义组件开发的, 必须再自定义组件里面加上对应的testID:
<SubmitButton onPress={this._doPhoneLogin}
accessibilityLabel="phoneLoginSubmit" testID="phoneLoginSubmit"
子组件中的代码:
{...this.props}> 很重要 或者手动写入 accessibilityLabel="phoneLoginSubmit" testID="phoneLoginSubmit"
app/view/SubmitButton.js
文件定义
<TouchableOpacity {...this.props}>
<Image source={require('../img/Rectangle.png')} style={styles.buttonView}>
<Text style={styles.loginText}>{this.props.text}</Text>
</Image>
</TouchableOpacity>
网友评论