LoginSignup
0
0

[Setup] Appium 2.x + Robotframework + Windows

Last updated at Posted at 2024-02-22

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

image.png

pathの確認をする

java --version

image.png

Android Studio

Androidのtestに必要なコマンドを、Android Stduioで構築する。

また、以下appiumに必要なコマンドをSDK Managerでinstallする

  • Android SDK Command-line Tools
  • Android SDK Tools (Obsolete)

image.png

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 で確認することができる

image.png

image.png

image.png

Pathが通っているかの確認

adb --version

image.png

NodeJS

appiumのinstallで、npmを使う。
そのため、nodejsをinstallする。windows版のinstallerを使うので簡単にセットアップできる。

install完了後、npmの動作確認をする

npm -v

image.png

最後に初期化する

npm init

image.png

Python

Pythonのinstall

install完了後、npmの動作確認をする

python --version

image.png

appium

npm i --location=global appium
npm install appium-doctor -g

image.png

これまでの構築がすべてうまくいっているかを検証する

appium-doctor

とりあえず、 ### Diagnostic for necessary dependencies completed, no fix needed. ### になにも記載がなければも最低限動く。

image.png

Appium Driver

chrome等のdriverをinstallする

npm install appium-chromedriver
appium driver install uiautomator2
appium driver install chromium

image.png

memo

install時に、下記エラーが発生するときがある。
これは証明書周りの問題で、セキュリティ上installを中断させている。

image.png

これを強制的に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

シナリオは以下の通り

  1. https://keiba.rakuten.co.jp/ にアクセスする
  2. マイページログイン をクリックする
  3. RakutenIDを入力し、”次へ”をクリックする
  4. Passwordを入力し、”ログイン”をクリックする
  5. 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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0