Appium

作者: Metoo丶淡然 | 来源:发表于2018-06-25 17:14 被阅读51次

Appium是一款开源的App 界面自动化测试软件. C/S架构, 客户端语言支持Java, JavaScript, Python等.

[参考资料]

http://appium.io/

如何定位元素及代码编写 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>

[注意事项]

[所有的测试代码, 界面交互的部分基本上都是异步的, 例如等待元素, 读取文本或者点击按钮, 输入内容等, 都需要aync或者await, 同步调用的代码大部分都会报错无法通过.]

相关文章

网友评论

      本文标题:Appium

      本文链接:https://www.haomeiwen.com/subject/pnixyftx.html