• 跳至主要內容
  • 跳至主要資訊欄
  • 跳至頁尾
  • Python應用
    • Python基礎操作
    • Web
      • Django
      • Flask
    • Chat bot
      • Line Bot
      • Telegram Bot
    • GUI
      • QT5
    • Google API
      • Google Drive
      • Google Gmail
      • Google sheet
    • 網頁技術
      • WordPress
      • HTML
      • CSS
      • JavaScript
  • 基本測試技術
    • Linux
    • 功能測試
    • 使用者測試
    • 壓力測試
    • 封包測試
    • 測試報告撰寫
    • 編寫測試用例
  • 自動化測試技術
    • API 自動化測試
      • Python API 測試
      • Postman
      • Jmeter
    • UI 自動化測試
      • AirTest
      • Appium
      • Robot Framework
      • Selenium
  • 問題跟蹤系統
    • Jira
    • Redmine
  • CI/CD
    • Git
    • Jenkins
    • Docker
    • K8S
    • Ngrok
  • 資料庫
    • MongoDB
    • MySQL
    • PostgreSQL
    • Redis
  • 伺服器
    • Heroku
    • Linode
    • Cloudways
    • GCP
    • AWS
  • 關於我
測試先生

測試先生

提供測試相關領域的技術文章以及其他軟體技術相關文章,如WordPress,Js,Css,Html,Python,Docker,Kubernetes,devops,k8s,jenkins,git,heroku,line,telegram

目前位置: 首頁 / 自動化測試技術 / UI 自動化測試 / Appium / 【自動化測試 教學】Mac 使用 Python + Appium 跑 Android Chrome 給你看!

【自動化測試 教學】Mac 使用 Python + Appium 跑 Android Chrome 給你看!

文章更新日期: 2022 年 4 月 19 日

不曉得大家對自動化是不是很感興趣呢?

本身對自動化非常的有興趣,能夠減少手動讓機器自己去執行,相當的省時又省力!

但也是需要花很多時間去學習,因此想分享我個人摸索的自動化測試工具給各位參考!

完整程式碼再文章最後面唷!

也許對你的工作有些微的幫助,為何我會使用Appium這又是什麼呢?

以下為大家簡單介紹

內容目錄

  • Appium 是什麼?
  • 如何安裝 Appium Server?
    • Command line 安裝
    • Appium doctor 檢查環境
  • 執行 Appium Server
  • Python 寫 Appium Android 自動化跑 Chrome
  • 為何使用Chrome來跑自動化呢?
  • Python 跑 Appium 前置必備參數設定
    • Python 跑 Appium 參數設定
    • Appium 跑 Chrome 自動化腳本流程
      • 第一步驟 點擊 接受並繼續 按鈕
      • 第二步驟 點擊 不用了,謝謝
      • 第三步驟 點擊 搜尋框 輸入網址
      • 第四步驟 擷取手機當下圖片
  • Python + Appium 跑 Android Chrome 完整程式碼
  • 更多技術文章

Appium 是什麼?

Appium 是一個開源工具,用於自動化 iOS 手機、 Android 手機和 Windows 桌面平台上的原生、移動 Web 和混合應用。

可以支援許多主流語言,例如Java,Swift,Python,.Net,Ruby等,但我主要是使用Python語言來進行操作。

它允許你用同樣的 API 對多平台(iOS、Android、Windows)寫測試

做到在 iOS、Android 和 Windows 測試套件之間使用代碼。

同一個測試語言法可以套用所以平台不論是Web、Android、iOS都可以使用

簡單來說你只有會了Appium,就會了基本的自動化UI測試,相當強大!

如果再搭配了API自動化測試,完美!

開始介紹如何安裝以及執行流程

如何安裝 Appium Server?

安裝Appium 會有兩種方式 一種是透過 Desptop安裝

另外一種是使用 command line安裝

不過這裡我只會介紹 command line安裝

如果想要透過 Desptop安裝可以到官網安裝 -> Appium官網

截圖 2021 06 22 下午3.09.21
截圖 2021 06 22 下午3.10.28

Command line 安裝

$ brew install node
$ npm install -g appium
$ pip3 install Appium-Python-Client

假設你不想安裝最新版本的 appium,有指定版本可以透過下方指令卸載後,再進行安裝

$ npm uninstall -g appium  # 刪除 appium
$ npm install -g appium@1.7.2  # 指定 1.7.2版本

Appium doctor 檢查環境

主要是來檢查 Appium有缺少哪些套件

$ npm install appium-doctor -g

單純檢查 Android 環境的話直接執行

$ appium-doctor --android

可能在檢查的時候,有出現一些缺少套件

再實際跑自動化時,是沒有什麼影響,如果有用到下方套件的話,會再寫另外一篇教學文章

# 可能會有錯誤
WARN AppiumDoctor  ✖ opencv4nodejs cannot be found.
WARN AppiumDoctor  ✖ ffmpeg cannot be found
WARN AppiumDoctor  ✖ mjpeg-consumer cannot be found.
WARN AppiumDoctor  ✖ bundletool.jar cannot be found
WARN AppiumDoctor  ✖ gst-launch-1.0 and/or gst-inspect-1.0 cannot be found

執行 Appium Server

再跑自動化之前,我們需要先開啟Appium server

需要與我們測試的手機進行溝通使用

如何執行 Appium server呢?

只需要再終端機上執行 appium就可以(這是預設指令,當然可以給於其他參數,但這篇還不會教到)

$ appium
 (node:46989) [DEP0128] DeprecationWarning: Invalid 'main' field in '/usr/local/lib/node_modules/appium/node_modules/mjpeg-server/package.json' of './lib/mpegserver'. Please either fix that or report it to the module author
 (Use node --trace-deprecation ... to show where the warning was created)
 [Appium] Welcome to Appium v1.21.0
 [Appium] Appium REST http interface listener started on 0.0.0.0:4723

(node:46989) [DEP0128] DeprecationWarning: Invalid ‘main’ field in ‘/usr/local/lib/node_modules/appium/node_modules/mjpeg-server/package.json’ of ‘./lib/mpegserver’. Please either fix that or report it to the module author

上面的錯誤只是一個警告,不用理會沒關係,不影響執行自動化。

Python 寫 Appium Android 自動化跑 Chrome

算是一個自動化腳本,還未到達測試,因為沒有搭配測試的功能

跑一個簡單的小流程給各位參考使用

可能前置作業會有些多,但熟悉後,就可以快速上手啦!

程式碼部份可能比較簡單,讓剛接觸的朋友看的懂為主

因此就一路走到底,了解怎麼跑,就可以來自己去規劃架構。

為何使用Chrome來跑自動化呢?

因為每台Android手機,幾乎都有Chrome APP

如果用其他App的話,比較難示範,還要去額外下載有些麻煩,因此使用Chrome來做範例

手機可以使用實體手機或是模擬手機都可以!

但前提條件需要把debug模式打開 -> 如何開啟debug

adb devices 可以認到就可以

$ adb devices
 List of devices attached
 emulator-5554    device

Python 跑 Appium 前置必備參數設定

首先你必須要知道你跑APP的Package Name 以及 Activity

但也是比較麻煩的部份

個人取得Package Name 以及頁面的元素

可以參考我另一篇寫的【Android 自動化測試 教學】 Macaca 透過 app-inspector 輕鬆獲取手機頁面資訊!

至於 Activity如何取得呢?

可以透過 adb logcat的方式進行

再你要跑自動化APP頁面,再終端機執行 adb logcat

由於log跑很快,因此我們透過搜尋的方式找尋 ” Package Name/“

就用Chrome app 範例 搜尋 “com.android.chrome/“

參考下圖

截圖 2021 06 22 下午11.56.41

Python 跑 Appium 參數設定

首先我們會需要下面幾個需要的參數,每個行程式碼,我後面都有簡單敘述用途

大致上就是把測試手機相關資訊以及你要配置的功能全部放置到 desired_caps字典內

會與Appium Server 進行溝通,也就是 localhost:4723 這串。

如果只有執行下方程式碼,會順利的叫起Chrome等待60秒自動關閉。

你會發現Python程式碼已經跑完了,但是卻還在Chrome頁面

主要是Server收到你的配置下一個指令需要等待60後,要是沒任何動作就關閉。

可以自己嘗試改秒數跑跑看。

請注意兩點!!

第一點是 appium server 與 現在執行的Python程式是要分兩個終端機來執行,也就是需要同時存在

不然跑自動化是不起來的。

第二點,如果你手機有登入Chrome有相關資料,再跑之前他會先清除相關Chrome數據資料。

也就是回到最一開始還未登入google 帳號的狀態

但是將 noReset 的參數改成 True,就不會清除資料,但後面介紹的自動化腳本會跑失敗

因為不符合預期結果

from appium import webdriver
import time
import os

desired_caps = {}  # 空字典 需要給予測試手機相關資訊
desired_caps['platformName'] = 'Android'  # 測試的平台
desired_caps['platformVersion'] = '11.0'  # 手機os版本
desired_caps['deviceName'] = 'Pixel 3'  # 看你手機的名稱是什麼
desired_caps['automationName'] = "UiAutomator2"  # 一定要的!
desired_caps['autoGrantPermissions'] = True  # 自動同意授權
desired_caps['appPackage'] = 'com.android.chrome'
desired_caps['appActivity'] = 'com.google.android.apps.chrome.Main' 
desired_caps['noReset'] = False  # 改成 True,會保留原先資料,但自動化腳本會失敗
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

Appium 跑 Chrome 自動化腳本流程

透過上面的參數我們可以順利地叫起Chrome APP了!

我們就來寫寫腳本吧!看怎麼跑

我的自動化流程規劃是,啟動Chrome 順利到達Facebook登入頁面,最後擷取手機圖片

自動化腳本分為4個步驟

如果某一個步驟失敗了,就會跑Fail

因此範例腳本基本上不太會失敗,除非無網路或是超過時間沒抓到元素

第一步驟 點擊 接受並繼續 按鈕

當Chrome清除資料,第一次起來APP會是長這樣

2021 06 23 00 26 54

我們需要點擊接受並繼續的按鈕,才會到下一個頁面

首先我們先等待5秒鐘,確保整個頁面的元素都有看到

這時候透過 find_element_by_id 來搜尋此頁面是某有相同的id

有的話就會印出id的文字並且點擊按鈕,接續等待3秒

time.sleep(5)  # 等待5秒

agree_btn_ele = driver.find_element_by_id('com.android.chrome:id/terms_accept')  # 取得 接受並繼續 元素
print('點擊: {0}'.format(agree_btn_ele.get_attribute('text')))  # 取得 接受並繼續 元素的文字
agree_btn_ele.click()  # 執行點擊的動作
time.sleep(3)  # 等待3秒

第二步驟 點擊 不用了,謝謝

順利的到達下一個頁面

截圖 2021 06 23 上午12.47.53

上個程式碼有等待3秒,因此會看到整個頁面元素

一樣透過 find_element_by_id 來搜尋 我們要的元素

並且印出來不用了,謝謝文字,並且進行點擊

這時候應該很順利的到達Google首頁,我們在等個3秒

negative_btn_ele = driver.find_element_by_id('com.android.chrome:id/negative_button')  # 取得不用了,謝謝 元素
print('點擊: {0}'.format(negative_btn_ele.get_attribute('text')))  # 取得 不用了,謝謝 元素的文字
negative_btn_ele.click()
print("進入到Googleg首頁")
time.sleep(3)  # 等待3秒

第三步驟 點擊 搜尋框 輸入網址

ok!我們到達Google首頁,要來進行搜尋的動作輸入網址

2021 06 23 00 27 04

一樣我們透過 find_element_by_id 找尋我們的搜尋框 元素

指定我們搜尋框的元素執行 send_keys 輸入網址

最後透過 press_keycode 來按下Enter鍵 進行搜尋

就會順利的到達Facebook 登入頁面嚕!

search_box_text_ele  = driver.find_element_by_id('com.android.chrome:id/search_box_text')  # 取得搜尋框 元素
print('點擊: {0}'.format(search_box_text_ele.get_attribute('text')))  # 取得搜尋框 元素的文字
print('輸入網址: https://m.facebook.com/')
search_box_text_ele.send_keys("https://m.facebook.com/")  # 輸入字串
driver.press_keycode(66)  # 按下 Enter Key
print("進入到Facebook登入頁面")
time.sleep(5)  # 等待5秒

第四步驟 擷取手機當下圖片

2021 06 23 00 29 55

有時候在自動化跑流程的時候

可能某頁面Fail就可以透過下方的程式碼,擷取手機當下的畫面存到本地端

driver.get_screenshot_as_file(os.getcwd() + '/test.png')  # 擷取手機當下圖片,再跟目錄底下
截圖 2021 06 23 上午12.57.44
順利儲存圖片到跟目錄位置下

可能會有人發現說為何一直使用 time.sleep()?

主要是等待元素出現其中一種方法

這篇主要是簡單介紹大致上的流程以及簡單的功能

Python + Appium 跑 Android Chrome 完整程式碼

有需要朋友們可以拿去參考,跑跑看!

也許你會有動力學習 Appium 自動化

希望有幫助到想學習的朋友們!

from appium import webdriver
import time
import os

desired_caps = {}  # 空字典 需要給予測試手機相關資訊
desired_caps['platformName'] = 'Android'  # 測試的平台
desired_caps['platformVersion'] = '11.0'  # 手機os版本
desired_caps['deviceName'] = 'Pixel 3'  # 看你手機的名稱是什麼
desired_caps['automationName'] = "UiAutomator2"  # 一定要的!
desired_caps['autoGrantPermissions'] = True  # 自動同意授權
desired_caps['appPackage'] = 'com.android.chrome'
desired_caps['appActivity'] = 'com.google.android.apps.chrome.Main' 
desired_caps['newCommandTimeout'] = 60  # 接收下一個指令的時間(秒)
desired_caps['noReset'] = False  # 改成 True,會保留原先資料,但自動化腳本會失敗
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

time.sleep(5)  # 等待5秒

agree_btn_ele = driver.find_element_by_id('com.android.chrome:id/terms_accept')  # 取得 接受並繼續 元素
print('點擊: {0}'.format(agree_btn_ele.get_attribute('text')))  # 取得 接受並繼續 元素的文字
agree_btn_ele.click()
time.sleep(3)  # 等待3秒

negative_btn_ele = driver.find_element_by_id('com.android.chrome:id/negative_button')  # 取得不用了,謝謝 元素
print('點擊: {0}'.format(negative_btn_ele.get_attribute('text')))  # 取得 不用了,謝謝 元素的文字
negative_btn_ele.click()
print("進入到Googleg首頁")
time.sleep(3)  # 等待3秒

search_box_text_ele  = driver.find_element_by_id('com.android.chrome:id/search_box_text')  # 取得搜尋框 元素
print('點擊: {0}'.format(search_box_text_ele.get_attribute('text')))  # 取得搜尋框 元素的文字
print('輸入網址: https://m.facebook.com/')
search_box_text_ele.send_keys("https://m.facebook.com/")  # 輸入字串
driver.press_keycode(66)  # 按下 Enter Key
print("進入到Facebook登入頁面")
time.sleep(5)  # 等待5秒

driver.get_screenshot_as_file(os.getcwd() + '/test.png')  # 擷取手機當下圖片,再跟目錄底下

文章內的程式碼都可以直接複製下來練習操作,或是直接套用到自己的專案都行!

多練習,對自已會有很大的幫助!

一回生二回熟,將所學習到內容變成自己的知識。

人就是要學習自己不會的事情,這樣才會不斷的成長、進步!

更多技術文章

透過下方按鈕找尋到相關的技術文章,希望可以幫助到正在學習的你

html 教學文章
Python 教學文章
Ngrok 教學
Jenkins 教學
WordPress 教學
Chatbot 教學

加入到我的粉絲專頁,不定期發布最新文章資訊!
有任何文章問題都可以詢問喔!

測試先生

文章分類: Appium 文章標籤: appium android python, appium doctor, appium python client, appium server, click, find_element_by_id, get_attribute text, press_keycode, send_keys © 2021–2022

主要資訊欄

  • 電子郵件
  • Facebook
  • GitHub
  • LinkedIn
  • Appium 是什麼?
  • 如何安裝 Appium Server?
    • Command line 安裝
    • Appium doctor 檢查環境
  • 執行 Appium Server
  • Python 寫 Appium Android 自動化跑 Chrome
  • 為何使用Chrome來跑自動化呢?
  • Python 跑 Appium 前置必備參數設定
    • Python 跑 Appium 參數設定
    • Appium 跑 Chrome 自動化腳本流程
      • 第一步驟 點擊 接受並繼續 按鈕
      • 第二步驟 點擊 不用了,謝謝
      • 第三步驟 點擊 搜尋框 輸入網址
      • 第四步驟 擷取手機當下圖片
  • Python + Appium 跑 Android Chrome 完整程式碼
  • 更多技術文章

Footer

  • 隱私權政策
  • 免責聲明與使用條款
  • 聯絡我們
  • 電子郵件
  • Facebook
  • GitHub
  • LinkedIn

Copyright © 2022 · Magazine Pro on Genesis Framework · WordPress · 登入