2020年6月9日火曜日

Appium 入門 3 ( サンプルアプリのボタンを押す)

前回の記事で、サンプルアプリでHello World!を表示されるまでをやってみました。
やったというか、ただ公式サイトのサンプルコードをコピペしただけですが...

今回はこのサンプルアプリについているボタンを押すところをAppiumでやってみます。
サンプルアプリ(API Demos)を起動して、Views → Buttons と遷移させると表示されるボタンです。

初心者の自分にとってはとても大変でした。
環境
Windows 10
Android 5.1 (実機)
appium 1.15.1

1.概要
大まかには、この画面やボタンの情報を取得して、それを元に前回のjavascriptのコードに反映させるという流れとなります。

2.画面の情報取得( appActivity )
const opts = {
  path: '/wd/hub',
  port: 4723,
  capabilities: {
    platformName: "Android",
    platformVersion: "5.1",
    deviceName: "002628105537",
    app: "C:/Users/XXXXX/Desktop/appium_test/ApiDemos-debug.apk", 
    appPackage: "io.appium.android.apis",
    appActivity: ".view.TextFields",   // ← ここに入れる情報
    automationName: "UiAutomator2"
  }
};
javascriptの 「appActivity」に入れる情報を取得します。
実機の方でサンプルアプリを起動して、押下したいボタンの画面を表示しておき、
コマンドプロンプトで「adb shell」と打ち込みます。

※adbコマンドが実行できない場合は、環境変数のpathに%ANDROID_HOME%\platform-toolsを追加するか、platform-toolsにcdで移動して、実行してください。

そのままコマンドプロンプトで下記のコマンドを打ち込みます。
dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
表示された文字列の赤線の部分がappActivityに入れるものとなります。


参考にしたサイトはこちらです。

3.画面の情報取得( ボタンの情報)

3.1 uiautomatorviewerを起動

%ANDROID_HOME%\tools\binにある「uiautomatorviewer.bat」をダブルクリックします。
※uiautomatorviewer.batが起動しない場合は、こちらが参考になるかもしれません。

3.2 uiautomatorviewerで情報を取得

起動したら、左上のボタンを押します。
ちょっと待つと画像が表示されるので、押したいボタンをマウスでクリックします。
右のペインにクリックしたボタンの情報が表示されるので、class名をコピーしておきます。


4.クリックの表現方法を調べる
Appiumのサイトでコマンドのページがあるので、そちらを参考にしました。
「$('#SomeId').click();」


5.javascriptに反映
手順の2~4で調べた情報を元にjavascriptに反映します。
// javascript

const wdio = require("webdriverio");
const assert = require("assert");

const opts = {
  path: '/wd/hub',
  port: 4723,
  capabilities: {
    platformName: "Android",
    platformVersion: "5.1",
    deviceName: "002628105537",
    app: "C:/Users/XXXXX/Desktop/appium_test/ApiDemos-debug.apk",  // ここは環境に合わせてください。
    appPackage: "io.appium.android.apis",
    appActivity: ".view.Buttons1",     					// 手順2で調べたものに書き換える
    automationName: "UiAutomator2"
  }
};

async function main () {
  const client = await wdio.remote(opts);

  const field = await client.$("android.widget.Button");  // 手順3で調べたものに書き換える
  await field.click();									  // 手順4で調べたものに書き換える


  await client.deleteSession();
}

main();
5.結果
これで実行すると、ボタンが押されました。
できた。

実行方法がわからない場合は、前回前々回の記事を参考にしてください。
0 件のコメント:
コメントを投稿