Mac搭建appium環境及python執行程式碼示例

程序员李林發表於2024-04-22

Appium主要是透過呼叫安卓提供的介面來執行命令的,所以需要安裝Java和安卓SDK。

1.安裝Appium服務端

appium的服務端是基於node的,直接使用npm(node包管理器)安裝即可,比較簡單。

npm install -g appium

2.安裝Python客戶端

pip install Appium-Python-Client

同樣直接使用pip安裝即可。

3.安裝Java環境

brew tap AdoptOpenJDK/openjdk

brew install adoptopenjdk8

配置環境變數

JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
 CLASS_PATH="$JAVA_HOME/lib"
 PATH=".$PATH:$JAVA_HOME/bin"
 export PATH=/usr/local/bin:$PATH

4.安裝安卓SDK

brew install --cask android-platform-tools

配置環境變數:

export ANDROID_HOME=/Users/xxx/Library/Android/sdk

其中xxx為使用者名稱。
完成之後,將安卓手機連線到電腦,注意手機的開發者許可權之類的全部開啟。
然後執行 adb devices,可以顯示裝置,則安裝成功。

其實透過brew安裝的軟體預設在命令列是可以直接開啟不用配置環境變數的,因為brew設定了軟連結,但是appium的服務無法讀取到,所以上面還是需要配置一下。

5.連線測試

根據上面的配置之後,環境基本安裝完畢,下面來測試一下,首先啟動appium服務端。
命令列執行:appium,出現歡迎介面則沒有問題。
主要是測試一下 Appium Inspector,這個是Appium提供的檢視手機app元素以及其它功能的桌面軟體,可以大大提升開發效率。
下載開啟這個軟體,遠端主機、埠、路徑都使用預設不填即可,主要填一下右下角的 JSON Representation:

'platformName': 'Android', # 被測手機是安卓 
'automationName' : 'UiAutomator2',
'appPackage': 'tv.danmaku.bili', # 啟動APP Package名稱 
'appActivity': '.ui.splash.SplashActivity', # 啟動Activity名稱 
'unicodeKeyboard': True, # 使用自帶輸入法,輸入中文時填True 
'resetKeyboard': True, # 執行完程式恢復原來輸入法 
'noReset': True, # 不要重置App 'newCommandTimeout': 6000, 

填上最前面的platformName和automationName就可以,其它都是選配。

6.python程式碼測試

執行官網的python示例程式碼:

import unittest

from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy

capabilities = dict(
    platformName="Android",
    automationName="uiautomator2",
    deviceName="Android",
    appPackage="com.android.settings",
    appActivity=".Settings",
)

appium_server_url = "http://localhost:4723"


class TestAppium(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Remote(
            appium_server_url,
            options=UiAutomator2Options().load_capabilities(capabilities),
        )

    def tearDown(self) -> None:
        if self.driver:
            self.driver.quit()

    def test_find_battery(self) -> None:
        el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="電池"]')
        el.click()


if __name__ == "__main__":
    unittest.main()

成功則表示正常連線

相關文章