ラベル Appium の投稿を表示しています。 すべての投稿を表示
ラベル Appium の投稿を表示しています。 すべての投稿を表示

2021年2月23日火曜日

appium windows driver 入門 1

やりたいこと
appium windows driverを使って、C#のサンプルコードを動作させたい。
電卓を操作するサンプルコードです。

ためした環境
Win10 20H2 Home
Microsoft Visual Studio Community 2019

Step1.Windows10をdevelop modeにする
設定 > 更新とセキュリティ > 開発者向け > 開発者モード : ON
※なんのためにこれをやるのかは分かっていないです。

Step2.WinAppDriver install
こちらのサイトからWindowsApplicationDriver_1.2.1.msiをダウンロードしました。
https://github.com/Microsoft/WinAppDriver/releases
インストーラを起動して、ウィザードに従ってインストールしました。

Step3.サンプルコードのダウンロード
1.こちらのサイトにアクセスします。
https://github.com/microsoft/WinAppDriver
2.右上のcode → download zipを選択します。
Step4.サンプルコードを開く
1.ダウンロードしたフォルダのC#の電卓用のサンプルコードを開きます。以下のパスにあります。
\WinAppDriver-master\Samples\C#\CalculatorTest
CalculatorTest.sln

2.CalculatorTest.slnをダブルクリックして開きます。
※Visual Studioが必要になりますので、入っていない場合はインストールしてください。


Visual Studioが起動したら、一旦このままにしておきます。

Step5.WinAppDriverを起動
C:\Program Files (x86)\Windows Application DriverにあるWinAppDriver.exeをダブルクリックします。 コマンドプロンプトが起動します。
これでWinAppDriverが起動したこのになるので、このままにしておきます。
Step6.テスト実行
いよいよテストを実行します。
Visual Studioにて、テストメニュー > 全てのテストをデバッグを選択します。
電卓が起動して、VisualStudio側で例外が発生したら、ひとまず成功です。

112行目の「splitViewPane.FindElementByName("Standard Calculator").Click();」で例外となります。
これはsampleコードが英語環境用に作られているためとなります。

電卓の左上あたりの「標準」をクリックするというプログラムなのですが、sampleでは「standard calculator」を探しているので、それがなくてエラーとなります。
Step7.UIの情報
日本語環境ではうまく動かないので、日本語のコントロールの名称に置き換えて、sampleコードをまともに動くようにしていきます。

1.UIの情報を取得するツール inspect.exeを起動します。
Visual Studio がインストールされている場合は、下記のパスにあります。
C:\Program Files (x86)\Windows Kits\10\bin\XXXXX\x64 (XXXXX はバージョン番号)
なければ、こちらのページを参考にインストールしてください。
https://qiita.com/RPAbot/items/f1d6438c8f2500db65ae

2.inspect.exeを起動したまま、電卓のクリックしたい場所をマウスでポイントすると、inspect.exeにその情報が表示されます。
sampleの「standard calculator」に該当するのは、「標準 電卓」という名前のようです。


3.先ほど例外が発生したところを下記のように書き換えて、もう一度テストを実行してみます。
(変更前)
splitViewPane.FindElementByName("Standard Calculator").Click();
(変更後)
splitViewPane.FindElementByName("標準 電卓").Click();

先ほどよりは少し進むようになりますが、また別のところで例外が発生すると思います。
あとは同じような感じで直していけば最後まで動くようになります。
最後まで直したコードがこちらになります。
Step8.コードを全面的に修正
全面的に日本語環境用に修正したコードがこちらになります。
//******************************************************************************
//
// Copyright (c) 2017 Microsoft Corporation. All rights reserved.
//
// This code is licensed under the MIT License (MIT).
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
//******************************************************************************

using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Appium.Windows;
using System.Threading;
using System;

namespace CalculatorTest
{
    [TestClass]
    public class ScenarioStandard : CalculatorSession
    {
        private static WindowsElement header;
        private static WindowsElement calculatorResult;

        [TestMethod]
        public void Addition()
        {
            // Find the buttons by their names and click them in sequence to perform 1 + 7 = 8
            session.FindElementByName("1").Click();
            session.FindElementByName("プラス").Click();
            session.FindElementByName("7").Click();
            session.FindElementByName("等号").Click();
            Assert.AreEqual("8", GetCalculatorResultText());
        }

        [TestMethod]
        public void Division()
        {
            // Find the buttons by their accessibility ids and click them in sequence to perform 88 / 11 = 8
            session.FindElementByAccessibilityId("num8Button").Click();
            session.FindElementByAccessibilityId("num8Button").Click();
            session.FindElementByAccessibilityId("divideButton").Click();
            session.FindElementByAccessibilityId("num1Button").Click();
            session.FindElementByAccessibilityId("num1Button").Click();
            session.FindElementByAccessibilityId("equalButton").Click();
            Assert.AreEqual("8", GetCalculatorResultText());
        }

        [TestMethod]
        public void Multiplication()
        {
            // Find the buttons by their names using XPath and click them in sequence to perform 9 x 9 = 81
            session.FindElementByXPath("//Button[@Name='9']").Click();
            session.FindElementByXPath("//Button[@Name='乗算']").Click();
            session.FindElementByXPath("//Button[@Name='9']").Click();
            session.FindElementByXPath("//Button[@Name='等号']").Click();
            Assert.AreEqual("81", GetCalculatorResultText());
        }

        [TestMethod]
        public void Subtraction()
        {
            // Find the buttons by their accessibility ids using XPath and click them in sequence to perform 9 - 1 = 8
            session.FindElementByXPath("//Button[@AutomationId=\"num9Button\"]").Click();
            session.FindElementByXPath("//Button[@AutomationId=\"minusButton\"]").Click();
            session.FindElementByXPath("//Button[@AutomationId=\"num1Button\"]").Click();
            session.FindElementByXPath("//Button[@AutomationId=\"equalButton\"]").Click();
            Assert.AreEqual("8", GetCalculatorResultText());
        }

        [TestMethod]
        [DataRow("1",   "プラス", "7", "8")]
        [DataRow("9",  "マイナス", "1", "8")]
        [DataRow("8", "除算", "8", "1")]
        public void Templatized(string input1, string operation, string input2, string expectedResult)
        {
            // Run sequence of button presses specified above and validate the results
            session.FindElementByName(input1).Click();
            session.FindElementByName(operation).Click();
            session.FindElementByName(input2).Click();
            session.FindElementByName("等号").Click();
            Assert.AreEqual(expectedResult, GetCalculatorResultText());
        }

        [ClassInitialize]
        public static void ClassInitialize(TestContext context)
        {
            // Create session to launch a Calculator window
            Setup(context);

            // Identify calculator mode by locating the header
            try
            {
                header = session.FindElementByAccessibilityId("Header");
            }
            catch
            {
                header = session.FindElementByAccessibilityId("ContentPresenter");
            }            

            // Ensure that calculator is in standard mode
            if (!header.Text.Equals("Standard", StringComparison.OrdinalIgnoreCase))
            {
                session.FindElementByAccessibilityId("TogglePaneButton").Click();
                Thread.Sleep(TimeSpan.FromSeconds(1));
                var splitViewPane = session.FindElementByClassName("SplitViewPane");
                splitViewPane.FindElementByName("標準 電卓").Click();
                Thread.Sleep(TimeSpan.FromSeconds(1));
                Assert.IsTrue(header.Text.Equals("標準", StringComparison.OrdinalIgnoreCase));
            }

            // Locate the calculatorResult element
            calculatorResult = session.FindElementByAccessibilityId("CalculatorResults");
            Assert.IsNotNull(calculatorResult);
        }

        [ClassCleanup]
        public static void ClassCleanup()
        {
            TearDown();
        }

        [TestInitialize]
        public void Clear()
        {
            session.FindElementByName("クリア").Click();
            Assert.AreEqual("0", GetCalculatorResultText());
        }

        private string GetCalculatorResultText()
        {
            string newStr = "";
            newStr = calculatorResult.Text.Replace("表示は", string.Empty).Trim();
            return newStr.Replace("です", string.Empty).Trim();
            //return calculatorResult.Text.Replace("Display is", string.Empty).Trim();
        }
    }
}
Step9.できた!!
これで実行すると、電卓が立ち上がって、計算をして、終了するところまで走ります。
できた。
参考にしたサイト
(1)Appium Windows Driverのページ
http://appium.io/docs/en/drivers/windows/
(2)Windows Application Driver を使った Windows ネイティブアプリケーションの UI テスト自動化
https://qiita.com/yuuhu04/items/5a96608ad96eccee34a0

2021年2月11日木曜日

2020年6月22日月曜日

Appium 入門6 ( 電卓のボタン押す)

はじめに
Appiumを使って、電卓のボタンを押すところまでやってみました。
今までjavascriptでやってきたのですが、うまくできなかったために、javaに乗り換えました。

環境
OS : Windows 10
スマホ : emulator (Pixel3 API 26)
Android Studio : 3.6.3
Appium : 1.17.1
言語 : java

参考にしたサイト

https://www.swtestacademy.com/appium-tutorial/
↑ 細かく書かれており、とても参考になりました。

1.準備
appium等のインストールは完了した状態で実施しております。
まだの場合はAppium入門1 を参考に、 javascriptでサンプルコードが動作するところまで実施できるようにしてみてください。
2.intellij IDEA をインストール
下記のサイトから無料版(コミュニティ)の方をダウンロードします。  https://www.jetbrains.com/ja-jp/idea/download/#section=windows
3.dependencies.の設定
3-1. IntelliJ IDEAを起動する。
3-2.+ Create New Projectを押す。
3-3.Mavenを選択して、Nextボタンを押す

3-4.Nameに適当な名前を付けてFinishボタンを押す。
3-5.https://mvnrepository.com/ にアクセスする。
3-6.「io.appium」 で検索する。
java-client - 最新のバージョンを選択し、mavenというタブに表示されたxmlをコピーする。
 3-7.コピーしたものをintellj IDEAのpom.xmlにペーストする。
dependenciesというタグで囲む必要があります。
同じようにselenium-javaと, testngもコピペします。
最終的にはこんな感じになります。
 
	
    4.0.0

    org.example
    untitled
    1.0-SNAPSHOT

  
    
        
        
            io.appium
            java-client
            7.3.0
        

        
        
            org.seleniumhq.selenium
            selenium-java
            3.141.59
        

        
        
            org.testng
            testng
            7.1.0
            test
        

    
  
  
	
3-8. versionの数字が赤い場合は、下図の更新ボタンを押すか、intelljを再起動すると     読み込まれるようです。(この辺はちょっと怪しいです。) 
 
4.inspectorで情報取得
4-1. emulator を起動
4-2. 電卓アプリを起動
4-3. appiumを起動
4-4. uiautomatorviewerを起動
4-5. 電卓の1のボタンのresource-idを後で使います。
※uiautomatorviewerの使い方はこちらを参考にしてください。

5.emulatorの情報取得
5-1.emulatorを起動しておく
5-2.PCでコマンドプロンプトを起動する。
5-3.adb devices とコマンドプロンプトに打ち込んで実行する。
※adbコマンドが実行できない場合は、環境変数のpathに%ANDROID_HOME%\platform-toolsを追加するか、platform-toolsにcdで移動して、実行してください
5-4.表示された文字列を後で使います。

6.javaのコードを作成
6-1. intellJ IDEAで src - test - javaを右クリック
New - Java Class を追加 - 任意の名前でクラスを追加する。

6-2. ここまでで集めた情報を使って次のコードを書きます。
①~④のところに今まで集めた情報を入れます。 後は特に変更しませんでした。
参考にしたサイトのコードとは少し異なります。不要と思うところを削除したためです。

      import io.appium.java_client.MobileElement;
      import io.appium.java_client.android.AndroidDriver;
      import org.openqa.selenium.By;
      import org.openqa.selenium.remote.DesiredCapabilities;
      import org.openqa.selenium.support.ui.ExpectedConditions;
      import org.openqa.selenium.support.ui.WebDriverWait;
      import org.testng.annotations.AfterMethod;
      import org.testng.annotations.BeforeMethod;
      import org.testng.annotations.Test;

      import java.net.MalformedURLException;
      import java.net.URL;

      public class calctest {
          public AndroidDriver driver;
          public WebDriverWait wait;

          @BeforeMethod
          public void setup () throws MalformedURLException {
              DesiredCapabilities caps = new DesiredCapabilities();
              caps.setCapability("deviceName", "Pixel 3 API 26"); // ①emulatorの名前
              caps.setCapability("udid", "emulator-5554");        // ②adb devicesコマンドの結果
              caps.setCapability("platformName", "Android");      // ③androidなのでandroid

              driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),caps);
              wait = new WebDriverWait(driver, 10);
          }

          @Test
          public void basicTest () throws InterruptedException {
              //Click and pass Splash
              wait.until(ExpectedConditions.visibilityOfElementLocated
                      (By.id("com.android.calculator2:id/digit_1"))).click();    // ④uiautomatorviewer.exeで取得した情報を
          }

          @AfterMethod
          public void teardown(){
              driver.quit();
          }
      }

      
	  

7.実行
7-1. emulatorを起動(「サーバーVXXXXXを起動する」ボタンも押しておく)
7-2. emulator上で電卓アプリを起動
7-3. intellj IDEAで、Runメニュー Runを押す。
7-4. 電卓の1が押せたら成功です。

8.できた
こんな感じで押せました。

2020年6月17日水曜日

Appium 入門5 ( UIの情報を取得する方法を整理)

はじめに
AppiumでUIの情報を取得する方法を整理します。
いろいろあるようなのですが、試してみてできたものを記載します。
使用した環境はこちらです。

環境

OS : Windows 10
スマホ : emulator (Pixel3 API 26)
Android Studio : 3.6.3
Appium : 1.17.1

準備
emulatorを起動させておきます。
1.android studio 起動
2.Toolsメニュー - AVD Manager
3.再生ボタンを押して起動する
4.情報を取得したいアプリを起動しておく。(電卓で試しました。)

(方法1)Appium Inspector を使う方法
1.コマンドプロンプトで、「adb devices」と打ち込みます。表示される情報を覚えておきます。


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

2.Appiumを起動する。
3.サーバvXXXを起動するボタンを押す。
4.右上の虫眼鏡のボタンを押す。

5.しばらく待つと下の画面が表示されます。

6.左下のテキストボックスに次の値を入れます。
udid, テキスト, emulator-5554 ← 手順1で表示された文字列
platformName, テキスト, Android

7.セッションを開始するボタンを押す。
そうすると、emulatorの画面が表示され、マウスで要素をクリックすると右のペインに情報が表示されます。

できた。
ネットの情報や、「実践 Appium」ではWindowsではInspectorは使えないという記載があるため、 だめなパターンがあるのかもしれないです。電卓ではできました。


(方法2)uiautomatorviewer を使う方法

1 uiautomatorviewerを起動

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

2 uiautomatorviewerで情報を取得

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

できた。
まとめ
AppiumでUIの情報を取得する方法を2通り、やってみました。
①Appium Inspector
②uiautomatorviewer
②は設定も特に不要で、起動するだけでよいので、こっちのほうが良いのかもしれません。
「実践 Appium」という書籍にはほかの方法も記載されていたので、試してたら追記します。

2020年6月14日日曜日

Appium 入門4 (javascript から javaに乗り換える)

前回までで、サンプルアプリのボタンが押せるところまでできたので、
別のアプリの操作をやってみようと思いました。

そこで、電卓のアプリのボタン操作にトライしてみたのですが、
javascrpt (webdriverio)だとやりかたがよくわからず、断念しました。

電卓のボタンの押し方がわからない...

ということで、javaに乗り換えることにしました。

こちらのwebページを参考に進めていったら、電卓のボタンが押せるところまでできました。


手順はこんど整理しようと思います。





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.結果
これで実行すると、ボタンが押されました。
できた。

実行方法がわからない場合は、前回前々回の記事を参考にしてください。

2020年6月5日金曜日

uiautomatorviewer.bat は jdk 8でないと動かない。

uiautomatorviewer.bat を起動したら、エラーがでて起動しませんでした。
-Djava.ext.dirs=..\lib\x86_64;.......  

ぐぐってみたところ、jdk8でないとだめということでした。
jdk14を入れていたので、こちらをアンインストールして、jdk8に入れなおしました。

直後だとまた別のエラーがでたので、再起動したら、uiautomatorviewerが起動しました。

よかった。

2020年6月3日水曜日

Appium 入門2 ( 実機で Hello World! )


emulator上でHelloworldを表示することに前回やってみました。
今回は実機でHello worldを表示する方法を試してみました。

環境
Windows 10
Android 5.1 (実機)
appium 1.15.1

インストール
インストールの手順は省略します。前回の記事を参考にしてください。

手順

1.Android端末側の準備

開発向けオプション : ON
USBデバッグ : ON
にしました。

2.ADBコマンドで確認

コマンドプロンプトで「adb devices」を実行して、実機がリストされることを確認しました。
adbコマンドが使えない場合は、android sdkのフォルダのplatform-toolsを環境変数のパスに登録するか、そこに移動して、adbコマンドを実行する必要があります。
 

3.スクリプトの準備

前回のスクリプトのplatformversionを実機のAndroidのバージョンに変更
deviceNameを手順2のadb devicesの結果に変更しました。
※devicenameは変更しなくても動いたので、不要なのかもしれません。
// 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/xxxxxxx/Desktop/appium_test/ApiDemos-debug.apk",  
    appPackage: "io.appium.android.apis",
    appActivity: ".view.TextFields",
    automationName: "UiAutomator2"
  }
};

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

  const field = await client.$("android.widget.EditText");
  await field.setValue("Hello World!");
  const value = await field.getText();
  assert.equal(value,"Hello World!");

  await client.deleteSession();
}

main();

4.Appiumを起動

スタートメニュー → Appiumをクリック
特に設定等変更せずに、「サーバーVXXXXXを起動する」 ボタンを押す。

5.実行

コマンドプロンプトを開く
index.jsがおいてあるパスにcdコマンドで移動する。
「node index.js」コマンドを実行

6.結果

実機側でHello World!が表示されたら、成功。 できた。

2020年5月26日火曜日

Appium 入門1 ( emulatorで Hello World! ) 

はじめに
Appiumをwindows環境で構築してみようと思いました。androidの自動化が目的です。
参考にした情報はこちらです。

公式サイト

http://appium.io/docs/en/about-appium/getting-started/?lang=en

書籍

※こちらはたまに眺める程度で使用。
環境
環境はこちらです。
Windows 10
Android 8 (emulator)
appium 1.15.1

インストール

1.appiumのインストール

インストール方法が2通りあって、npmを使う方法と、デスクトップアプリで入れる方法。
npmがわからないので、デスクトップアプリを入れることにしました。
上記サイトのrelease pageからダウンロードをしました。



いろいろなバージョンがあるのですがlatest release を書かれたものをダウンロードしました。

2.ドライバーのインストール

自動化したい端末に合わせてドライバというものをインストールする必要がるようです。
手元にあるAndroidでためしたかったので、Androidのドライバをインストールすることにしました。Androidのドライバには2種類あって、EspressoとUIAutomatetor2があります。
flagshipはUIAutomator2の方ということなので、こっちを入れることにしました。

http://appium.io/docs/en/about-appium/getting-started/?lang=en


ドライバを入れるために下記のモジュールをインストールする必要があるため、入れました。こちらのページの「Basic Setup」の記事に従って入れていきました。

(準備1)Node.js (npm)

こちらからダウンロードしてインストールしました。
https://nodejs.org/en/download/
※npmはNode.jsをインストールすると入ります。
※npmがよくわからないからappiumのデスクトップ版をいれたのですが、ドライバを入れるために結局インストールすることになりました。

(準備2)JDK

JDKはこちらのサイトからダウンロードしました。
https://www.oracle.com/java/technologies/javase-downloads.html
※最新ものを入れました。 最新でよいのかはちょっと不安です。
※この記事でやっていることだけであれば、最新版でもよいのですが、動かないtoolとかもあるのでJDK8のほうが良いかもしれません。
JDK8はoracleのサイトでアカウントを登録しないとダウンロードできないので、ちょっと手間でした。


(準備3)環境変数JAVA_HOMEの設定

システム環境変数にJAVA_HOMEを設定し、JDKのパスを設定する。
「C:\Program Files\Java\jdk1.8.0_251」を設定しました。 

※システムのプロパティ - 詳細設定 - 環境変数
環境変数のダイアログのシステム環境変数(下の方)の新規ボタンを押す。
変数名 : JAVA_HOME
変数値 : C:\Program Files\Java\jdk1.8.0_251 
を設定して、OKで閉じる。 変数値のほうは環境に応じて変更してください。

(準備4)環境変数PATHの設定

システム環境変数のPathに、JDKのbinパスを追加する。
%JAVA_HOME%\bin 

※システムのプロパティ - 詳細設定 - 環境変数
環境変数のダイアログのシステム環境変数で、Pathを選択して、編集ボタンを押し、
環境変数名の編集ダイアログで新規ボタンを押す。
%JAVA_HOME%\bin を追加する。

(準備5)Android Studio のインストール

もともといれてあったので、新しくインストールはしませんでした。
入っていたバージョンは3.6.3です。

(準備6)Android SDK toolsのインストール

Android Studio - Tools - SDK Manager - SDK toolsシート
Hide Obsolete Packagesのチェックを外す
Android SDK Tools が表示されるので、チェックしてapplyボタンを押下

(準備7)環境変数ANDROID_HOMEの設定

システム環境変数にANDROID_HOMEを設定し、android SDKのパスを設定する。
sdkのパスはAndroid Studioを起動して、Toolsメニュー - SDKマネージャー を開いて、 Android SDK Locationから確認しました。

※ついでにシステム環境変数のPathに%ANDROID_HOME%\platform-toolsを追加しておくと、のちのち便利です。

(ドライバインストール)

下記のコマンドをコマンドプロンプトで実行
npm install appium-uiautomator2-driver

(appium-doctorでチェック)

コマンドプロンプトで「npm install -g appium-doctor」を実行し、appium-doctorをインストール
「appium-doctor --android」を実行し、状況をチェック
ここまでで必須のものがOKとなっていることを確認できました。
デモアプリでHello World!

1.デモアプリの準備

公式サイトからダウンロードする。
「・・・this test Apk・・・」というリンクがあるので、そこからダウンロードしました。
これをwindows上にダウンロードします。
※よくわからず、これをemulatorでダウンロードしたりして、四苦八苦しました。

2.emulatorの起動

Android Studio - Tools - AVD Manager から emulatorを作成して、起動しておく。
サンプルに合わせてandroid 8のemulatorを作成しました。

3.サンプルコードの準備

windows上の任意の場所にindex.jsファイルを作成します。
テキストに公式サイトのサンプルをそのまま貼り付けます。
app: のところを、デモアプリをダウンロードしたパスに書き換えます。
// javascript

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

const opts = {
  path: '/wd/hub',
  port: 4723,
  capabilities: {
    platformName: "Android",
    platformVersion: "8",
    deviceName: "Android Emulator",
    app: "C:/XXXXXXXXXXXX/ApiDemos-debug.apk", // ←ここだけ書き換える。 
    appPackage: "io.appium.android.apis",
    appActivity: ".view.TextFields",
    automationName: "UiAutomator2"
  }
};

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

  const field = await client.$("android.widget.EditText");
  await field.setValue("Hello World!");
  const value = await field.getText();
  assert.equal(value,"Hello World!");

  await client.deleteSession();
}

main();
※内容はまだ理解していないです。

4.appium起動

スタートメニュー → Appiumをクリック
特に設定等変更せずに、「サーバーVXXXXXを起動する」 ボタンを押す。

5.実行

コマンドプロンプトを開く
index.jsがおいてあるパスにcdコマンドで移動する。
「npm init -y」コマンドを実行
「npm install webdriverio」コマンドを実行
「node index.js」コマンドを実行

※npm XXXは一回やればいいのかなぁ

6.結果

emulator側でHello World!が表示されたら、成功。
できた。