Outline
これまで何度もappium , robotframeworkのsetupのドキュメントを書いてきた。
ただ、mac中心であった。今回、windows 環境で android (iOSをテストしたい場合、Macにすべし)のテストを簡単に行いたかったので、そのセットアップを残す
install
Java
Javaをinstallする
install後、pathを設定する
環境変数 | 設定値 |
---|---|
JAVA_HOME | C:\Program Files\Java\jdk-21 |
Path | %JAVA_HOME%\bin |
pathの確認をする
java --version
Android Studio
Androidのtestに必要なコマンドを、Android Stduioで構築する。
また、以下appiumに必要なコマンドをSDK Managerでinstallする
- Android SDK Command-line Tools
- Android SDK Tools (Obsolete)
install後、pathを設定する
環境変数 | 設定値 |
---|---|
ANDROID_HOME | %HOMEPATH%\AppData\Local\Android\Sdk |
Path | %ANDROID_HOME%\platform-tools |
Path | %ANDROID_HOME%\cmdline-tools\latest\bin |
尚、環境によって異なる場合があるので、その場合はANDROID_HOMEはSettings -> Android SDK Location で確認することができる
Pathが通っているかの確認
adb --version
NodeJS
appiumのinstallで、npmを使う。
そのため、nodejsをinstallする。windows版のinstallerを使うので簡単にセットアップできる。
install完了後、npmの動作確認をする
npm -v
最後に初期化する
npm init
Python
Pythonのinstall
install完了後、npmの動作確認をする
python --version
appium
npm i --location=global appium
npm install appium-doctor -g
これまでの構築がすべてうまくいっているかを検証する
appium-doctor
とりあえず、 ### Diagnostic for necessary dependencies completed, no fix needed. ### になにも記載がなければも最低限動く。
Appium Driver
chrome等のdriverをinstallする
npm install appium-chromedriver
appium driver install uiautomator2
appium driver install chromium
memo
install時に、下記エラーが発生するときがある。
これは証明書周りの問題で、セキュリティ上installを中断させている。
これを強制的にskipしてinstallさせるには、以下環境変数を設定してinstallを再実行すると成功する(とおもう)
npm config set strict-ssl false
set NODE_TLS_REJECT_UNAUTHORIZED=0
reference
robotframework
pipを使ってインストールする
pip3 install robotframework
また、必要に応じてlibraryをinstallする
pip3 install robotframework-appiumlibrary
pip3 install robotframework-seleniumlibrary
※ 2024/03/27追記
Appium-Python-Client==4.0.0 を使用すると、AppiumLibraryが正しく動かない
[ ERROR ] Error in file 'C:\Users\sadaaki.emura\Documents\script\robot\sp_hotel_login.robot' on line 2: Importing library 'AppiumLibrary' failed: ModuleNotFoundError: No module named 'appium.webdriver.common.touch_action'
Traceback (most recent call last):
File "C:\Program Files\Python312\Lib\site-packages\AppiumLibrary\__init__.py", line 4, in <module>
from AppiumLibrary.keywords import *
File "C:\Program Files\Python312\Lib\site-packages\AppiumLibrary\keywords\__init__.py", line 9, in <module>
from ._touch import _TouchKeywords
File "C:\Program Files\Python312\Lib\site-packages\AppiumLibrary\keywords\_touch.py", line 3, in <module>
from appium.webdriver.common.touch_action import TouchAction
理由がわからないので、Appium-Python-Clientのversionを下げて利用することをお勧めする
DEMO
では、実際にandroid chromeを起動してみたら、失敗した!
appium
[ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: No application is open
Test Case Open Chrome In Real Device | FAIL |
WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: No Chromedriver found that can automate Chrome '74.0.3729'. You could also try to enable automated chromedrivers download as a possible workaround.
Stacktrace:
UnknownError: An unknown server-side error occurred while processing the command. Original error: No Chromedriver found that can automate Chrome '74.0.3729'. You could also try to enable automated chromedrivers download as a possible workaround.
at getResponseForW3CError (C:\Users\sadaaki.emura\AppData\Roaming\npm\node_modules\appium\node_modules\@appium\base-driver\lib\protocol\errors.js:1118:9)
at asyncHandler (C:\Users\sadaaki.emura\AppData\Roaming\npm\node_modules\appium\node_modules\@appium\base-driver\lib\protocol\protocol.js:491:57)
原因を調べてみると、今回実機で使っているchromeのversionに合ったchromedriver をdownloadできてないようだ
そこで、起動時のoptionを変えてみた。
すると、対象のchromedriverをdownloadして、chromeを起動することができる
appium server --allow-insecure chromedriver_autodownload
sample script
シナリオは以下の通り
- https://keiba.rakuten.co.jp/ にアクセスする
- マイページログイン をクリックする
- RakutenIDを入力し、”次へ”をクリックする
- Passwordを入力し、”ログイン”をクリックする
- MyPageの表示をverifyする
*** Settings ***
Library AppiumLibrary
*** Variables ***
${APPIUM_SERVER} http://localhost:4723
${BROWSER} Chrome
${PLATFORM_NAME} Android
${UDID} XXXXXXXXXX # Android DeviceのUDID
${DEVICE_NAME} XPERIA
${PLATFORM_VERSION} 9
${AUTOMATION_NAME} UiAutomator2
${TIMEOUT} 30
*** Test Cases ***
Test Case Open Chrome In Real Device
Open Android Browser https://keiba.rakuten.co.jp/
Login
Login RakutenID RakutenID Password
Close Mobile Browser
Close_APP
*** Keywords ***
Open Android Browser
[Documentation] To open android browser and go to provided URL
[Arguments] ${url}
Open Application ${APPIUM_SERVER}
... platformName=${PLATFORM_NAME}
... automationName=UiAutomator2
... udid=${UDID}
... deviceName=${DEVICE_NAME}
... platformVersion=${PLATFORM_VERSION}
... browserName=${BROWSER}
... autoAcceptAlerts=false
... autoGrantPermissions=true
... autoWebView=true
... shouldTerminateApp=true
Go To URL ${url}
Close_APP
Close Application
Login RakutenID
[Arguments] ${uid} ${pwd}
##Wait Until Element is Visible xpath=//*[@id="commonBalanceBar"]/ul/li/a[text()='マイページログイン'] timeout=${TIMEOUT}
Click Element xpath=//*[@id="commonBalanceBar"]/ul/li/a[text()='マイページログイン']
Wait Until Element is Visible xpath=//*[@id="user_id"] timeout=${TIMEOUT}
Input Text xpath=//*[@id="user_id"] ${uid}
Click Element xpath=//*[@id="cta001"]/div/div[text()='次へ']
Wait Until Element is Visible xpath=//*[@id="password_current"] timeout=${TIMEOUT}
Input Text xpath=//*[@id="password_current"] ${pwd}
Click Element xpath=//*/div/div[text()='ログイン']
Wait Until Element is Visible xpath=//*[@id="commonBalanceBar"]/div[1]/div/div[1]/div[1]/a timeout=${TIMEOUT}
Pointとして、chromeをopenするときOpen Applicationを使用する。capabilitiesとして、以下設定することで、android実機でchromeを操作することができる
platformName=Android
automationName=UiAutomator2
browserName=chrome