Appium

Appium是一款開(kāi)源的App 界面自動(dòng)化測(cè)試軟件. C/S架構(gòu), 客戶端語(yǔ)言支持Java, JavaScript, Python等.

[參考資料]

http://appium.io/

如何定位元素及代碼編寫(xiě) https://appium.io/docs/en/commands/element/find-elements/index.html

[安裝命令行工具]

brew install node      # get node.js
npm install -g appium  # 安裝 appium, 只需一次
appium &               # 啟動(dòng) appium

[運(yùn)行測(cè)試]

[準(zhǔn)備安卓測(cè)試環(huán)境]

由于React Native的一些限制, 目前還無(wú)法運(yùn)行iOS測(cè)試. 因此只能針對(duì)安卓設(shè)備進(jìn)行自動(dòng)UI測(cè)試.

可以用模擬器AVD, Genymotion(需要先安裝VirtualBox)或者真機(jī)運(yùn)行.

啟動(dòng)模擬器或者真機(jī), 用數(shù)據(jù)線連接到電腦上.

[修改安卓運(yùn)行參數(shù)]

修改文件app/flags.js, 設(shè)置GUI_TEST為true.

// 本文件內(nèi)容在 Jenkins 自動(dòng)打包時(shí)會(huì)被覆蓋, release 模式會(huì)自動(dòng)設(shè)置為 false, dev 會(huì)設(shè)置為true, 修改僅對(duì)本地環(huán)境生效
export const DEBUG = true;
export const GUI_TEST = true;

[打安卓GUI測(cè)試包或者直接進(jìn)入調(diào)試模式]

運(yùn)行命令

chmod +x *.sh
build_android_debug_UI測(cè)試.sh

或直接用調(diào)試模式, 運(yùn)行 react-native run-android

注意這時(shí)候要同時(shí)修改文件 __tests__/Helper.js (不要提交此文件):

app:  process.cwd() + "/android/app/build/outputs/apk/li-debug.apk"

[運(yùn)行UI測(cè)試腳本]

使用WebStorm打開(kāi)文件__tests__/GUI.android.test.js 或 __tests__/GUI.android.service.test.js, 點(diǎn)擊運(yùn)行箭頭測(cè)試單個(gè)測(cè)試?yán)?

[使用Android Monitor定位元素的ID或者描述ID]

啟動(dòng)Monitor: android-sdk-macosx/tools/monitor

點(diǎn)擊工具欄上的 Dump view UI hierarchy for Automator

Monitor

此處對(duì)應(yīng)的resource-id的用法:

let tab = await driver.waitForElementsById("cn.***.***:id/bottom_navigation_container", 15000);

下面的content-desc對(duì)應(yīng)testID, 用法:

let phoneLoginSubmit = await driver.waitForElementsByAccessibilityId('phoneLoginSubmit',20000);

[修改代碼給界面加入測(cè)試定位ID]

大部分元素默認(rèn)都是很不好定位的. 所以必須在RN中給元素加入testID:

<Label accessibilityLabel="phoneLoginSubmit" testID="phoneLoginSubmit"

如果一個(gè)組件是用自定義組件開(kāi)發(fā)的, 必須再自定義組件里面加上對(duì)應(yīng)的testID:

<SubmitButton onPress={this._doPhoneLogin}
      accessibilityLabel="phoneLoginSubmit" testID="phoneLoginSubmit"

子組件中的代碼:

{...this.props}> 很重要 或者手動(dòng)寫(xiě)入 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>

[注意事項(xiàng)]

[所有的測(cè)試代碼, 界面交互的部分基本上都是異步的, 例如等待元素, 讀取文本或者點(diǎn)擊按鈕, 輸入內(nèi)容等, 都需要aync或者await, 同步調(diào)用的代碼大部分都會(huì)報(bào)錯(cuò)無(wú)法通過(guò).]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容