マウス・フォーカス・スクロールイベントに関するSeleniumのメソッドについて

3,988 views
Skip to first unread message

jieun kim

unread,
Apr 10, 2017, 12:42:11 AM4/10/17
to 日本Seleniumユーザーコミュニティ
いつもお世話になっております。金と申します。

Javaでの作成を前提として、
下記Selenium APIのリンクを参照しておりますが、
見当たらないイベント処理がありまして、質問させていただきたいです。


①マウスイベント(onclick, ondbclick, onmouseover, onmouseout, onmousemove, onmousedown, onmouseup, onmousewheel)
⇒ それぞれのイベントを発火させるためのメソッドがありますでしょうか?

②フォーカス関連イベント(onfocus, onblur)
⇒「sendkeys(エンターキー)」を利用することになりますでしょうか?

③スクロール関連イベント
⇒ FormやDiv要素に表示されたスクロールを上下に操作するなどに使えるメソッドがありますでしょうか?

大変お手数ですが、ご教示いただければ幸いです。

伊藤望

unread,
Apr 10, 2017, 9:56:43 PM4/10/17
to 日本Seleniumユーザーコミュニティ
伊藤です。

> マウスイベント
イベントだけをまさに呼び出したいのであればJavascriptExecutorというクラスでJavaScriptのイベントを呼ぶことになると思います。
単にクリックしたいのであればWebElementのclickメソッドが使えます。
ダブルクリック・マウス移動・マウスダウン・マウスアップについては、
色々な機能があるのでそれを使えます。
マウスホイールについてはなさそうなのでJavascriptExecutorでscrollTo()/scrollBy()などのメソッドを呼ぶしかなさそうです。
ちなみに、クリックなどの対象の要素は必要に応じてSeleniumで自動的にスクロールされます。


> フォーカス関連イベント(onfocus, onblur)
何したいかによりますが、要素にフォーカスを当てたいなら要素をクリックします。
それでフォーカスイベントなどは発生すると思います。
Seleniumでテストを作成するときはクリック・キー入力などユーザー操作と同じことをするのが基本で、
特定のイベントを発生させるというテストはあまりしないと思います。
イベントが起きたことをチェックしたいなら、その結果画面の表示テキストなどが変わったことをチェックする、
などの方が一般的と思います。
イベントだけをまさに呼び出したいのであればJavascriptExecutorを使うしかないと思います。


> スクロール関連イベント
クリックなどの対象の要素は必要に応じてSeleniumで自動的にスクロールされるので、
明示的にスクロールを行う機会はあまりないと思います。
スクロールを明示的にしたいならJavascriptExecutorでJavascriptの
scrollTo()/scrollBy()などのメソッドを呼ぶことになると思います。

jieun kim

unread,
Apr 11, 2017, 3:22:29 AM4/11/17
to 日本Seleniumユーザーコミュニティ
伊藤さん

早々のご回答ありがとうございます。
大変参考になりました。

ついでに、補足質問ですが、教えて頂いた「Actionクラス」の活用に関しては、
以下のようなFirefoxの制約(Actions Class not working with gecko driver)があるようですが、
最新のSeleniumにも残存している課題との認識でよろしいでしょうか?

また、他のイベントに関しても、2点ほど、質問がございます。
①iOSやAndroidのモバイルアプリの場合、タッチ操作に関しても
上記のActionクラスを利用するとのイメージでよろしいでしょうか?

②マルチ環境での検証を前提としていて、
アプリケーションの起動もしくは終了持に、何らかの処理を入れている場合、
その処理の正常を検証するために、Selenium側の検証ロジックにてキャッチさせるようなことも可能でしょうか?

大変お手数ですが、引き続きよろしくお願いいたします。


2017年4月11日火曜日 10時56分43秒 UTC+9 伊藤望:

伊藤望

unread,
Apr 23, 2017, 11:21:46 AM4/23/17
to 日本Seleniumユーザーコミュニティ
金さん

今さらですみません。

> 以下のようなFirefoxの制約(Actions Class not working with gecko driver)があるようですが、
> 最新のSeleniumにも残存している課題との認識でよろしいでしょうか?
最近試していないのですが、おそらく残存しています。

>①iOSやAndroidのモバイルアプリの場合、タッチ操作に関しても
>上記のActionクラスを利用するとのイメージでよろしいでしょうか?
単なるタップであればclickを使います。
アプリのスワイプ・ダブルタップ・長押しなどの操作は、
AppiumでTouchActionクラスやMultiTouchActionクラスを使うのが一般的だと思います。
Actionクラスは試したことはないですが、うまく動かないのではないかと思います。

> Selenium側の検証ロジックにてキャッチさせるようなことも可能でしょうか?
起動や終了時のその処理がうまく行った時にJavascriptの変数やHTML中のどこかの値を変更するようにしておき、
Selenium側ではwaitのロジックや繰り返しループなどによって、その値が期待値通りになるまで待機する、
という手法が一般的だと思います。
JavaScriptやサーバ側で発生したイベントをトリガーとして、
直接Selenium側のロジックを起動させるのは難しいと思います。

jieun kim

unread,
Apr 24, 2017, 4:23:00 AM4/24/17
to 日本Seleniumユーザーコミュニティ
伊藤さん

ご説明ありがとうございます。
おかげさまでどのように実装するのができるのか
その方式についてようやくイメージがつきました。

またの疑問や質問がありましたら、お問い合わせいたします。
今後ともよろしくお願いいたします。








2017年4月24日月曜日 0時21分46秒 UTC+9 伊藤望:
Reply all
Reply to author
Forward
0 new messages