[Selenium] スマホ用ページをテスト!!タップイベントを発火させる
こんにちは、@yoheiMuneです。
前回に引き続き、Seleniumでスマホ用のページをテストすることを目的に、 本日はタップイベントをSeleniumから発火させる方法をブログに書きたいと思います。
いろいろと調べているとそのボタンは、clickイベントではなくtouchイベントに反応するように実装されていました。
Seleniumからタップイベント(touchstartとtouchend)を発火させる方法を調べて実装したので、今回ブログに書く次第でございます。
具体的にはこんな感じで実装しました。
という感じで、JS経由でタップすることでタップイベントを実行することが出来ます。
上記の内容をメソッドに切り出すなどすると、綺麗にタップイベントを作成することが出来ます。
(メソッドにした場合)
今回も最後までご覧頂きましてありがとうございました。
前回に引き続き、Seleniumでスマホ用のページをテストすることを目的に、 本日はタップイベントをSeleniumから発火させる方法をブログに書きたいと思います。
Seleniumでタップイベントを発火させる
Seleniumでは、スマホ用ページのテストをしていて、ボタンをタップしても反応しないなぁという事象に出会いました。いろいろと調べているとそのボタンは、clickイベントではなくtouchイベントに反応するように実装されていました。
Seleniumからタップイベント(touchstartとtouchend)を発火させる方法を調べて実装したので、今回ブログに書く次第でございます。
タップイベントを発火
Seleniumのデフォルト機能では(おそらく)タップイベントを発火できないので、JSを起動してタップする実装にしました。具体的にはこんな感じで実装しました。
// CSSセレクタ形式でタップ対象を指定する。 String cssSelector = "button.longSize"; // タップするためのJSを作成する // 以下ではjQuery(またはzepto)を使っているが、他の方法でも。 String js = "$($('"+cssSelector+"').get(0)).trigger('touchend');"; // JSを実行してタップする。 // driverはWebDriver型の変数。 ((JavascriptExecutor)driver).executeScript(js);
という感じで、JS経由でタップすることでタップイベントを実行することが出来ます。
上記の内容をメソッドに切り出すなどすると、綺麗にタップイベントを作成することが出来ます。
(メソッドにした場合)
protected void tap(String cssSelector) { String js = "$($('"+cssSelector+"').get(0)).trigger('touchstart').trigger('touchend');"; ((JavascriptExecutor)driver).executeScript(js); }
最後に
スマホページは、タップイベントをさせないと出来ない部分もあり、Seleniumでのテストもいろいろと苦労するなぁという気持ち。 今後もいろいろとはまりそうだなぁと感じますw。今回も最後までご覧頂きましてありがとうございました。