Selenium WebDriverのまとめ
ようやく、操作を自動化したいサイトのアプリ作成が終わったので、手間がかかったことをまとめておきます。
Click, SendKeys, Submitメソッド
Seleniumは、手動操作を自動化するものなので、これらのメソッドでほとんどのinputタグの値を設定できます。できないものは、type="hidden"くらいでしょうか。
inputタグの中で、ダイアログがでるものがあります。type="file"しかやってませんが、type="text"と同様にSendKeysメソッドでファイルパスを設定すればOKです。
SendKeysはキーボード入力のエミュレートですが、漢字もOKでした。
MoveToFrame, ModeToWindowメソッド
iframeタグで、他のページを見せている場合は、画面に表示されているのにFindElementメソッドで見つけられません。ソースを見てもフレーム内の内容はありませんから、当然ですね。
こんな時に、MoveToFrameメソッドを使ってそのフレームに移動すると、FindElementメソッドで見つけることができるようになります。
そもそも、ソースに無いものをどうやって見つけるかというと、Chromeブラウザの場合は、F12キーを押して開発者ビューから、フレーム内の内容をたどることができます。そして操作したいターゲットを特定します。
もとに戻る場合、MoveToWindowメソッドを使います。このとき、引数であるwindowHandleが必要なので、フレームに移動する前にWebDriver.CurrentWindowHandleプロパティの値を保持しておきます。
ExecuteScriptメソッド
javascriptを使いたいときに使用します。ドライバーのインスタンスをIJavaScriptExecutorインターフェースにキャストして使います。
javascriptを使えるなら何でもできちゃいそうですが、使う場面は限られるように思いました。
僕の場合は、input type="text"にonclickイベントで、javascriptで表示させたダイアログの操作結果を設定するという部分に使いました。手動操作では、値を入力するためにそのフィールドをクリックするだけでダイアログが表示されるので、直接入力したい内容はそのダイアログでしかできません。
Seleniumを駆使してそのダイアログの操作をするのはとても面倒という判断をして、ダイアログでやっているであろう処理を操作プログラム内でやらせて、その結果を設定するのに、javascriptを使いました。
((IJavaScriptExecutor)driver).ExecuteScript(string.Format("$('#<操作したいID>').val('{0}');", "<処理結果>"));
driverは、WebDriverのインスタンスです。
こんなところでしょうかね。後は、タイムアウトの問題ですが、これは前回の記事で書きました。ふぅ。おつかれ