Appiumを使った文字入力とcontext switch

Appiumに関して、以下の2点に関してメモがてら。

  • 文字入力
  • WebView(Hybrid view)

以下、Appium1.3.4の時の話です。

文字入力

iOSでは、Appium(というか、Selenium)が提供するキー入力にsendKeysが存在します。また、UIAutomationでは、setValueが提供されています。

iOSでは、マルチバイト文字入力含め、setValueによる文字入力のほうが安定しています。ですが、全てのテキストフィールドにそれを使うことができるわけではありません。SecureTextFieldに関しては、sendKeysを使わなければ正常に文字入力ができませんでした。

そのため、安定したテストを書くためには、TextFieldにはsetValueを、SecureTextFieldのみはsendKeysを使いましょう。

Rubyのライブラリの話をすると、appium_libのこの行を参考にすると、以下の通り type で定義されているメソッドに内包されています。

# Cross platform way of entering text into a textfield
def type text
  # type
  $driver.execute_script %(au.getElement('#{self.ref}').setValue('#{text}');)
end # def type

また、同様にソースを見ると、このメソッドはAndroidではsend_keysとして扱われています。
そのため、以下のようなルールを設けて実施すると良いでしょう。

  • SecureTextFieldを対象にしている場合はsend_key
  • ↑以外の場合はsetValue

こんな感じで内包することになるでしょうか。

def fill(text, in_element)
  if is_element.class == 'UIASecureText' # ちゃんと書き換えることが必要
    in_element.send_keys text
  else
    in_element.type text
  end
end

WebView

Hybridアプリの場合、contextを変更することでネイティブ、WebViewのそれぞれを操作対象として変更することができます。

なのですが、iOSアプリの一部WebViewで操作する必要のある画面をiOS Simulatorで実行していた時の話です。contextでWebViewに設定しても期待通りに動作しませんでした。むしろ、正常に要素すら取得できていなかったです。逆に、Nativeで実施すると正しく動作した。

AndroidやiOS real deviceの話までは詳しく追ってはないのですが、context switchはいらないのか…??

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中