# 自動化測試

# APP自動化測試環境建置

### 建立應用程式 UI 自動化測試 - 以 Robot Framework 為例

[https://ithelp.ithome.com.tw/users/20168859/ironman/7650](https://ithelp.ithome.com.tw/users/20168859/ironman/7650)

java

[Java Downloads | Oracle 台灣](https://www.oracle.com/tw/java/technologies/downloads/#jdk24-windows)

jdk-24\_windows-x64\_bin

[![image-1751637163184.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/sC3qj9o1IF7VUtG3-image-1751637163184.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/sC3qj9o1IF7VUtG3-image-1751637163184.png)

[![image-1751637195203.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/Qzx26p4r3tG65iWk-image-1751637195203.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/Qzx26p4r3tG65iWk-image-1751637195203.png)

install appium  
[https://ithelp.ithome.com.tw/articles/10360843](https://ithelp.ithome.com.tw/articles/10360843)

  
Robot Framework 安裝及初體驗  
  
install python  
[https://www.python.org/downloads/](https://www.python.org/downloads/)  
install nvm  
[https://github.com/coreybutler/nvm-windows](https://github.com/coreybutler/nvm-windows)

nvm install lts  
nvm use 22.16.0  
npm install -g appium

[![image-1751630234131.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/gbEwaM7upRkr1RJE-image-1751630234131.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/gbEwaM7upRkr1RJE-image-1751630234131.png)

[![image-1750756211301.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-06/scaled-1680-/9Mq8s9M0MIKaXZDy-image-1750756211301.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-06/9Mq8s9M0MIKaXZDy-image-1750756211301.png)

[![image-1750756233619.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-06/scaled-1680-/hzHWmUo1eUXZxv1V-image-1750756233619.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-06/hzHWmUo1eUXZxv1V-image-1750756233619.png)

install appium-inspector  
[https://github.com/appium/appium-inspector](https://github.com/appium/appium-inspector)

[![image-1750757422111.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-06/scaled-1680-/wpF2SSsT8R3qjFIW-image-1750757422111.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-06/wpF2SSsT8R3qjFIW-image-1750757422111.png)

```JSON
{
  "platformName": "Android",
  "appium:automationName": "uiautomator2",
  "appium:deviceName": "Android",
  "appium:appPackage": "com.android.settings",
  "appium:appActivity": ".Settings"
}
```

```shell
# 安裝其他套件

pip install robotframework
pip install robotframework-appiumlibrary
```

要讓 Appium 透過 USB 控制實體手機（例如 Android）來做測試，你需要讓你的 **notebook（筆電）與手機透過 USB 連線**，並配合幾個工具來完成連接。這裡用 **Android + Windows notebook** 為範例流程說明。

---

## ✅ 一、前置條件檢查

### 📱 手機端設定：

1. **開啟「開發者選項」**
    
    
    - 到手機設定 → 關於手機 → 點「版本號」七次 → 解鎖開發者模式
2. **打開 USB 偵錯**
    
    
    - 設定 → 系統 → 開發者選項 → 開啟「USB 偵錯」
3. **用 USB 傳輸線接上筆電**

---

## ✅ 二、筆電端（Windows）準備

### 1️⃣ 安裝 ADB（Android Debug Bridge）

#### 最快方法：安裝 Android Platform Tools（免裝 Android Studio）：

👉 下載網址：[https://developer.android.com/studio/releases/platform-tools](https://developer.android.com/studio/releases/platform-tools)

解壓縮後，把 `platform-tools` 資料夾加到環境變數 `PATH`。

### Windows

#### 如果安裝 Andrioid Studio 

```shell
#位置在
C:\Users\<你的帳號>\AppData\Local\Android\Sdk\platform-tools\adb.exe

```

#### 設定系統環境變數

1. 按下 Windows 鍵 → 輸入「環境變數」→ 選擇「編輯系統環境變數」
2. 點「環境變數（Environment Variables）」
3. 在 **使用者變數** 或 **系統變數** 中新增：
    
    <div><div><table class="w-fit min-w-(--thread-content-width)" data-end="802" data-start="531"><thead data-end="592" data-start="531"><tr data-end="592" data-start="531"><th data-col-size="sm" data-end="546" data-start="531">變數名稱</th><th data-col-size="sm" data-end="592" data-start="546">變數值</th></tr></thead><tbody data-end="802" data-start="667"><tr data-end="734" data-start="667"><td data-col-size="sm" data-end="686" data-start="667">`ANDROID_HOME`</td><td data-col-size="sm" data-end="734" data-start="686">`C:\Users\MOMO\AppData\Local\Android\Sdk`</td></tr><tr data-end="802" data-start="738"><td data-col-size="sm" data-end="763" data-start="738">`ANDROID_SDK_ROOT`（可選）</td><td data-col-size="sm" data-end="802" data-start="763">同上</td></tr></tbody></table>
    
    <div><div><button aria-label="複製表格" class="hover:bg-token-bg-tertiary text-token-text-secondary my-1 rounded-sm p-1 transition-opacity group-[:not(:hover):not(:focus-within)]:pointer-events-none group-[:not(:hover):not(:focus-within)]:opacity-0"><svg class="icon" fill="currentColor" height="20" viewbox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"></svg></button></div></div></div></div>
4. 編輯 `Path` 變數 → 加入以下路徑

```
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\emulator
```

完成後關閉並重新啟動 cmd / PowerShell / VSCode terminal

### Mac

```shell
brew install --cask android-platform-tools
```

驗證：

```cmd
adb devices

```

第一次會提示你在手機上授權，允許 USB 偵錯。

---

## ✅ 三、安裝 Appium 驅動（UIAutomator2）

```bash
appium driver install uiautomator2

```

確認：

```bash
appium driver list

```

---

## ✅ 四、啟動 Appium Server

```bash
appium

```

預設會在 `http://localhost:4723` 開啟伺服器。

---

## ✅ 五、撰寫測試程式連接手機

### 📝 以 Python 為例（也可用 Java、JS 等）

```python
from appium import webdriver

desired_caps = {
    "platformName": "Android",
    "deviceName": "Android Device",       # 或填 adb devices 顯示的 ID
    "appPackage": "com.android.settings", # 測試用，可改成你自己的 app
    "appActivity": ".Settings",
    "automationName": "UiAutomator2"
}

driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

driver.quit()

```

---

## ✅ 六、常見問題排解

<table id="bkmrk-%E5%95%8F%E9%A1%8C-%E8%A7%A3%E6%B3%95-adb-devices-%E7%9C%8B%E4%B8%8D"><thead><tr><th>問題</th><th>解法</th></tr></thead><tbody><tr><td>`adb devices` 看不到手機</td><td>檢查線材、USB 傳輸模式是否為「資料傳輸」，確認有開 USB 偵錯</td></tr><tr><td>Appium 找不到設備</td><td>確認驅動安裝好、手機有授權、Appium Server 已啟動</td></tr><tr><td>Appium 錯誤：no device found</td><td>驗證 `adb devices` 有成功列出設備</td></tr><tr><td>Appium Inspector 無法開啟 session</td><td>確認 desired capabilities 正確，並與 appium port 對上</td></tr></tbody></table>

---

如果你想搭配 Robot Framework 來寫測試，也可以再幫你整合 robotframework-appiumlibrary 的使用方式。

是否也需要說明 iOS 連線流程（macOS + iPhone 測試）？

# APP自動化測試安裝(IOS)

[![image-1751525865876.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/HHUWki8YTqfqFbYg-image-1751525865876.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/HHUWki8YTqfqFbYg-image-1751525865876.png)

[![image-1751526020594.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/rdu16aqFYZkgvloF-image-1751526020594.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/rdu16aqFYZkgvloF-image-1751526020594.png)

```
$xcode-select -p
/Applications/Xcode.app/Contents/Developer
$xcode-select -print-path
/Applications/Xcode.app/Contents/Developer
```

[![image-1751526490734.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/dcaWjutMA4n3dUze-image-1751526490734.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/dcaWjutMA4n3dUze-image-1751526490734.png)

[![image-1751526646989.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/mN1HD2FlPbQ8vy5i-image-1751526646989.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/mN1HD2FlPbQ8vy5i-image-1751526646989.png)

```
$xcrun simctl list devices
== Devices ==
-- iOS 17.0 --
    iPhone SE (3rd generation) (C2263CE0-B8D0-4A45-A8B6-819EBFDC6B3C) (Shutdown) 
    iPhone 15 (342CFDF8-F135-4C7E-B721-809DBAE2FED6) (Shutdown) 
    iPhone 15 Plus (A1502CF4-2655-41EF-ACCA-344DE1880989) (Shutdown) 
    iPhone 15 Pro (212B06CE-ABA0-4ED1-826C-E34313D29FD8) (Shutdown) 
    iPhone 15 Pro Max (C32A003C-E330-4653-98BD-67D69034B784) (Shutdown) 
    iPad Air (5th generation) (8B350383-3091-45C8-98A9-9EF9FAC09869) (Shutdown) 
    iPad (10th generation) (23A6B6DD-A65F-4EA4-8B20-D2504025FABB) (Shutdown) 
    iPad mini (6th generation) (2549DC38-10CE-4117-919C-2EA9F0105EFD) (Shutdown) 
    iPad Pro (11-inch) (4th generation) (1994EEF6-5F7D-4A93-A8E8-548988FF7F82) (Shutdown) 
    iPad Pro (12.9-inch) (6th generation) (96C9D1A6-AD3C-48DF-8A27-310800A51FF4) (Shutdown) 
-- iOS 18.1 --
    iPhone SE (3rd generation) (B50D832D-774F-4B7D-9D14-82395408AEA0) (Shutdown) 
    iPhone 16 Pro (1E598AB9-170B-429D-A45E-818CEFAC9B26) (Shutdown) 
    iPhone 16 Pro Max (E6888AFA-4A3E-4E18-BDB6-C270815306FE) (Shutdown) 
    iPhone 16 (AB625102-C6F4-425B-A280-D8C0E472A9B1) (Shutdown) 
    iPhone 16 Plus (AD5044C4-3EE2-4D41-897B-0CDC1AA82800) (Shutdown) 
    iPad (10th generation) (ACED15AA-AB6E-4B6B-A453-53A139698288) (Shutdown) 
    iPad Air 11-inch (M2) (3F29CBE6-098A-407E-B2F0-C03F10ACB3BC) (Shutdown) 
    iPad Air 13-inch (M2) (1E1CBA41-26E4-4825-B78F-9B1218B45CBD) (Shutdown) 
    iPad mini (A17 Pro) (EFFCCE75-3E77-4131-8BF3-1A2D23EDDC9A) (Shutdown) 
    iPad Pro 11-inch (M4) (85ADF4A5-46FD-4601-8B29-BD21892E3512) (Shutdown) 
    iPad Pro 13-inch (M4) (43E67B57-74B9-4060-8C20-CB892863F586) (Shutdown) 
```

[![image-1751823189170.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/ECDeMdNbP1ybn5bV-image-1751823189170.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/ECDeMdNbP1ybn5bV-image-1751823189170.png)

[![image-1751823868524.png](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/scaled-1680-/iG2eWZqJlBkqs2L0-image-1751823868524.png)](https://bookstack.treemanou.com/uploads/images/gallery/2025-07/iG2eWZqJlBkqs2L0-image-1751823868524.png)

# 相關連結

### AppiumLibrary key word

##### [https://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html#Introduction](https://bookstack.treemanou.com/AppiumLibrary)

### Appium 中文翻譯

##### [https://www.kancloud.cn/testerhome/appium\_docs\_cn/3209426](https://bookstack.treemanou.com/Appium)

# Appium、Python、Robot Framework 之間的關係

---

## ✅ Appium、Python、Robot Framework 之間的關係：

這三者可以整合在一起，是因為：

<table id="bkmrk-%E6%8A%80%E8%A1%93-%E8%A7%92%E8%89%B2-%E8%AA%AA%E6%98%8E-appium-%E6%B8%AC%E8%A9%A6%E5%BC%95%E6%93%8E"><thead><tr><th>技術</th><th>角色</th><th>說明</th></tr></thead><tbody><tr><td>**Appium**</td><td>測試引擎</td><td>提供 WebDriver API，控制手機（Android / iOS）的自動化操作</td></tr><tr><td>**Python**</td><td>實作擴充邏輯的程式語言</td><td>可以寫自己的測試邏輯、自訂關鍵字（如你現在做的）</td></tr><tr><td>**Robot Framework**</td><td>測試框架（高階語法）</td><td>用關鍵字驅動的方式來寫測試案例，支援 Python Library</td></tr></tbody></table>

---

## 🔄 它們如何互動？

```
[Robot Framework]
        |
        | 呼叫
        ↓
[自訂 Python 關鍵字]
        |
        | 呼叫
        ↓
[AppiumLibrary（內部就是 WebDriver）]
        |
        ↓
[Appium Server → 控制手機裝置]

```

---

### 📦 關鍵套件：

<table id="bkmrk-%E5%A5%97%E4%BB%B6%E5%90%8D%E7%A8%B1-%E7%94%A8%E9%80%94-appiumlibrar"><thead><tr><th>套件名稱</th><th>用途</th></tr></thead><tbody><tr><td>`AppiumLibrary`</td><td>Robot Framework 的套件，封裝了 Appium 操作</td></tr><tr><td>`robotframework`</td><td>測試框架本體</td></tr><tr><td>`appium-python-client`</td><td>Python 端 Appium 的驅動（AppiumLibrary 內部使用）</td></tr></tbody></table>

---

## ✅ 典型架構目錄

```
project/
├── tests/
│   └── test_login.robot
├── keywords/
│   └── custom_scroll.py   ← 這是你寫的 Python 關鍵字
├── resources/
│   └── variables.robot
├── requirements.txt

```

---

## ✅ Robot 測試如何叫到 Appium？

```robot
*** Settings ***
Library    AppiumLibrary
Library    keywords/custom_scroll.py

*** Test Cases ***
登入後登出
    Open Application    http://localhost:4723    platformName=iOS    ...
    Scroll To Text And Tap    登出

```

你寫的 `Scroll To Text And Tap` 是一個 Python 關鍵字，會去呼叫 Appium WebDriver 去執行滑動與點擊。

---

## ✅ 重點概念（幫你牢記）

- `Robot Framework` 是控制流程 + 組合測試邏輯。
- `AppiumLibrary` 是控制手機的橋樑（Python 包裝）。
- 你可以寫 Python function，然後 `@keyword` 暴露成 Robot 可以用的「關鍵字」。

---

如果你想我幫你整理一張「整合架構圖」或提供一份「快速入門模板」，我也可以幫你生成。需要嗎？