Appium + iOS Simulatorでのテストコードメモ

Appium + iOS Simulatorのメモです。実機は設定が面倒なのでシミュレータで。

インストールとかセットアップは公式のマニュアルを読むか、qiitaなどで検索すれば問題無いと思います。

使うものはこれら。

  • appium
  • node.js

node.jsはnpmでこれらを入れます。というか必要なものは全てnpmで入れます。

  • appium
  • wd
  • chai
  • chai-as-promised

wdはSelenium Webdriver/Appiumのnode.js bindingです。これ1個で両方対応できるので便利ですね。

テストコードはappiumのgithubにあるサンプルコードを参考にします。helpers/にあるjsファイルの読み込みはなんかはインライン展開して1ファイルにまとめてます。 これはテストのフレームワークにmochaを使ってます。

"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.3',
      platformName: 'iOS',
      platformVersion: '8.3',
      deviceName: 'iPhone 6',
      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)
      .waitForElementByName('q', 5000)
        .type('masami256')
      .waitForElementByName('btnG')
        .click()
      .waitForElementByLinkText('なんつってつっちゃった (@masami256) | Twitter')
        .click()
      .sleep(5000)
      .saveScreenshot('test.png');
  });

});

コードはこんな感じです。いくつか見ていくと、

この部分はAppiumサーバーがどこで動いているかの設定です。npmで入れたappiumコマンドは引数なしで実行すると0.0.0.0:4723にbindするのでこのように書いても問題なしです。

    var serverConfig = {
      host: 'localhost',
      port: 4723
    };

次のdesiredは実行対象のOSやブラウザの指定です。mobile safariを動かす場合はappは指定しなくてOKです。 実機を使う場合はudidを指定する必要があります。ここではSimulatorで動かすので設定してません。

    var desired = {
      browserName: 'safari',
      'appium-version': '1.3',
      platformName: 'iOS',
      platformVersion: '8.3',
      deviceName: 'iPhone 6',
      // udid: 'device udid',
      app: undefined
    };

deviceNameはXcodeWindows -> Devicesから調べるのが手っ取り早いと思います。

f:id:masami256:20150418121133p:plain

appium周りの設定はこれ位ですね。あとはmochaの作法に則ってテストを書いて処理はwdのマニュアルで調べる感じです。

注意点としてはSelenium IDEと違ってClick And Waitが無いので表示の待ち方は気をつけないといけないですね。

で、上のテストを実行すると実行した場所にtest.pngが作られます。

f:id:masami256:20150418121724p:plain

追記: wdの便利なところはserverConfigとdesiredの部分さえ切り替える仕組みを作っておけば(環境変数使うとか)PC版Webサイト・スマートフォン版Webサイト両対応させることができます( ´∀`)bグッ! 当然、css要素等が同じ必要はありますけども・・・

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方