AppiumでiPhone実機のMobileSafariをSelenium WebDriverで操作するまで

ios_webkit_debug_proxyだけで動かしてみた

インストール

今回はbrewからインストールした。

$ brew install ios_webkit_debug_proxy

動作確認

  1. 引数なしで起動すると今接続されているデバイスが自動で選択されlocalhost:9221で起動する。
  2. デバイス上でMobileSafariで適当なページを表示させる。
  3. Chromeでlocalhost:9221へ接続すると、接続しているデバイス、表示しているURLとリンクを辿れる。URLをクリックするとWebインスペクタが表示され、コンテンツをリモートで確認することができる。

Appiumを介してSelenium WebDriverでデバイスを操作する

Appiumのインストール

今回はbrewとnpmでインストールした。

$ brew install npm
$ npm install -g appium

もろもろインストールされる。

SafariLauncherをビルドしてappium-ios-driverがデバイスにインストールできるようにする

※ 本来はappium-ios-driverがSafariLauncherも自動的にビルドするようだがうまくいかなかったので先にSafariLauncherをビルドする。

  1. provisioning profileを作る。http://appium.io/slate/en/master/?ruby#setup67
  2. SafariLauncherを作ったプロファイルで動かしたいiOSバージョン向けにビルドする。 xcodebuild -sdk iphoneos9.2
  3. /usr/local/lib/node_modules/appium/node_modules/appium-ios-driver/build/SafariLauncherへSafariLauncher.appを配置する。

動作確認

  1. ios_webkit_debug_proxyがインストールされており正常に動作していること。
  2. Appiumをインストールする。
  3. Appiumをデバイスを使うように指定して起動する。appium --default-capabilities '{"app": "Safari", "deviceName": "iPhone", "udid": "${デバイスID}"}'
  4. Appiumがlocalhost:4723で起動しているので、Selenium WebDriverのRemoteドライバで接続する。
  5. Appiumが色々動いて、デバイス上でSafariLauncherが自動で起動し、Safariが自動で起動する。

こんなコードで操作できるようになる。

from selenium import webdriver

desired_capabilities = {
    'app': 'Safari',
    'platformName': 'iOS',
    'platformVersion': '9.2.1',
    'deviceName': 'iPhone',
}
driver = webdriver.Remote(
    command_executor='http://127.0.0.1:4723/wd/hub',
    desired_capabilities=desired_capabilities)
driver.get('http://yarch.jp')