【Appium】モバイルSafari上でテストを実行してみた
先日、iOSでAppiumを試してみたんですが、今回はiOSでやってみました。
お題
実機/シミュレータ上でモバイルSafariを起動しテストを実施する。
Appiumって?
- 作者: Manoj Hans,太田健一郎,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/11/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
Appiumとは、iOSおよびAndroidプラットフォーム上で動く - ネイティブアプリ - モバイルウェブサービス - ハイブリッドアプリ 等を自動化するオープンソースのツールです。
よくまとめられているコチラの記事をご参照ください。
Design(公式)
http://appium.io/slate/en/master/?ruby#appium-design
Concepts(公式)
http://appium.io/slate/en/master/?ruby#appium-concepts
なぜ必要に?
現在、広告配信タグ(モバイルウェブサービス用)のE2EテストにNightmareを使用しています。 しかし、 モバイルSafariでしか発生しない事象 (Mac Safariでも再現しない)にぶち当たり、実機(シミュレータ)を使用したE2Eテストの必要性が出てきました。 また、せっかくなら広告配信SDK(ネイティブアプリ用)のテストにも使っていきたいと思い。 そこで、SeleniumぽくてWebDriberの流れを組むやつをチームメンバーに紹介されたので試してみました。
Appium環境を構築するさいにiOSで注意すべきこと
- Mac環境のあるサーバーをたてないと実機/シミュ−レーターでのテストができない
- Xcode8に対応していない(時間の問題なんだろけど)
必要な条件
http://appium.io/slate/en/master/?javascript#requirements
Appiumサーバを用意する
CUIでやるなら
その上で下記からOS毎のセットアップにうつる http://appium.io/slate/en/master/?javascript#appium-platform-support
僕はなかなかうまくいかなくて・・・・
GUIでやってみる
githubで生成するよりも、GUI版をダウソしてくると少しバージョンが古い。 実践 Appiumで紹介されているバージョンに近いのはこっち。
ダウソ
latest versionをダウンロードする
Appium GUIを起動
v1.5.3のAppium GUIを起動してみた。
Appium GUIの設定
Basic
Adbanced
- XcodePath Xcodeを複数入れている場合は使用するやつに変更する
Appium GUIよりAppiumサーバを起動
Launch
ボタンをタップする。ダーッと出てくるので待つ。
テストを実行する
下記動かせるように適当にNode.js環境を整備した上で、mocha
で動かしてみてください。
元ネタは、関数を分割してしまっているのですが、見通しを良くするために僕のお試し版は、下記をご覧の通り1つの関数に全部つめこんじゃいました。
"use strict"; var wd = require("wd"); require('colors'); var chai = require("chai"); var chaiAsPromised = require("chai-as-promised"); chai.use(chaiAsPromised); var should = chai.should(); chaiAsPromised.transferPromiseness = wd.transferPromiseness; describe("ios safari", function () { this.timeout(300000); var driver; before(function () { var serverConfig = { host: 'localhost', port: 4723 }; driver = wd.promiseChainRemote(serverConfig); var desired = { browserName: 'safari', 'appium-version': '1.6', platformName: 'iOS', platformVersion: '9.3', deviceName: 'iPhone 6s', app: undefined }; return driver.init(desired); }); after(function () { return driver .quit(); }); it("should get the url", function () { return driver .get('https://www.google.com') .sleep(1000) .waitForElementById('lst-ib') //.waitForElementByName('q', 5000) .type('cyberagent') .waitForElementByClassName('kpgrb') //.waitForElementByName('btnGNS') .click() .waitForElementByLinkText('サイバーエージェント') .click() .sleep(5000) .saveScreenshot('test.png'); }); });
https://github.com/toguri/sample-code/blob/master/sample-code/examples/node/ios-safari-google.js
締め
まだ、うまくテストコードが書けてないけど、テストを実行するとシミュレータが起動してテストコードに書いて有る内容通りに、勝手に動きます。