Appiumクライアント(WebdriverIO)の構築

本記事はこちらの記事の続きとなっています。

https://qiita.com/ys-sgn/items/7390364e3d1e30483a92


# Appiumクライアント(WebdriverIO)の構築

Appiumサーバとやりとりを行うクライアント側の構築をします。
Appiumを動かすためのテストコードなどはクライアント側で実装を行います。

### WebdriverIO

WebdriverIOとは、WebDriverプロトコルに対するAppiumの拡張機能をサポートするクライアントライブラリであ流。JavaScriptを使用する場合はクライアントライブラリとしてWebdriverIOを使用します。（使用する言語ごとにクライアントライブラリが用意されている）


#### WebdriverIOのインストール


npmでインストールする

```
~/WorkSpace/appium-test $ npm install --save-dev @wdio/cli
~/WorkSpace/appium-test $ npm install --save-dev @wdio/local-runner
```

次にWebdriverIOの構成ファイルを作成します。
下記のコマンドを打つことで対話形式でWebdriverIOの構成を行うことが出来ます。

```
~/WorkSpace/appium-test $ npx wdio config
```
各質問に対してどのような構成にするのかを聞いてきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/4e0ae7f4-daf5-9a80-fe75-32db336c3954.png)
↓
質問と答え（表題の構成で行う場合）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/ce224a69-32f7-69d1-6b1f-f8c23cda7246.png)

最後に
Do you want me to run `npm install` (Y/n)
と聞かれるのでEnter(y)を押すとnpm installが行われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/c01db0df-4b80-979c-7c69-7ba7a6e6446b.png)


#### テストに使用するアプリファイルを準備する
apps/Androidフォルダを作成して、Androidフォルダ内にAPKファイルをセットする。
(本記事ではデモ用のアプリを使用するため、APKファイルをAppiumの[GitHub](https://github.com/appium/appium/tree/master/packages/appium/sample-code/apps)から取得しておく)
```
~/WorkSpace/appium-test $ mkdir apps
~/WorkSpace/appium-test $ mkdir apps/Android
```
ファイル構成は↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/26be1db0-b220-3e86-85ee-9045997c0aab.png)


#### エミュレーターを準備する
AndroidStudioのAVD Managerからエミュレーターを起動し、adb devicesコマンドで起動しているエミュレーターの名前を調べる。
※この例ではAndroid12のPixel4を使用する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/777bedfe-5095-7dce-7605-3725fa0c9f7b.png)

起動しているエミュレーター名は「emulator-5554」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/ad254536-b58d-6325-d998-42e1d4df9eb5.png)


先程構成をしたWebdriberIOの設定ファイル(wdio.conf.ts)を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/5b9186bf-c469-63d0-9619-5db8a70db6fa.png)


開いたwdio.config.tsに以下の変更と追記を行なって保存する

##### 追記するもの
* import {join} from 'path';   //２行目に追記する
* hostname: 'localhost',
* path: 'wd/hub',

##### 変更するもの
* maxInstance: **10** -> maxInstance: **1** ※複数の端末でテストを行えるようになるまでは1で良い
* capabilities: [{},], の中身を↓に変更
```
capabilities: [
  {
    maxInstances: 1,
    platformName: 'Android',
    automationName: 'UiAutomator2',
    app: join(
      process.cwd(),
      './apps/Android/ApiDemos-debug.apk'
      ),
    platformVersion: '12',
    deviceName: 'emulator-5554',
    newCommandTimeout: 60,
  },
],
```
* service: ['appium'], を↓に変更
```
services: [
    [
      'appium',
      {
        command: 'appium',
        logPath: './config/logs/',
        logFileName: 'appium.log',
        args: {
          address: 'localhost',
          port: 4723,
      },
    },
  ],
],
```


**(追記)**
testフォルダ内にあるtsconfig.jsonファイルはappium-testフォルダに移動させる
※移動させないとコンパイルエラーが起きる


## Appiumを実行してみる
実行する前にあらかじめエミュレーターを立ち上げておきます。

AndroidStudio > AVD Manager > (wdio.config.tsのcapabilitiesに記載したエミュレーターを起動する)


プロジェクトのルートディレクトリで以下のコマンドを実行する
```
~/WorkSpace/appium-test $ npx wdio test/wdio.conf.ts
```

すると、appiumが動き出して、エミュレーター上でアプリが立ち上がります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/4ac3ee28-070a-fed8-09a6-598c124c290d.png)

ただ、この時点ではデフォルトのテストケースのみであるため、テストが失敗してアプリが終了してしまいますが、クライアント側の構築は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759762/c84e29c4-ec00-2d0e-00d6-b14e0c60088a.png)




次に、テストコードを作成するためにアプリの要素がどのように定義されているかをAppiumデスクトップを利用して調べます。


## ↓続き
https://qiita.com/ys-sgn/items/75d3337e965f9aa9cb53