きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × Angularなどの忘備録

Selenium × Tips × Datepiker操作を調べていくうちにわかったことまとめ

目的

www.kinakomotitti.netの続き。 調べていくうちに見つけたTipsの忘備録。

Tips1:値の取得

Usecase

カレンダーで選択した値が期待値と同じかを確認するために、値を取得したい。

Solution

InputタグにID属性が降られていることを前提とするコードになっているが、Elementを特定できれば、他の方法で特定しても問題ない。 ''' //Elementを特定した後、GetPropertyでValueプロパティの値を取得する。 var test1 = driver.FindElement(By.Id("mat-input-0")).GetProperty("value");

//Javascriptを実行し値を取得する。 var test2 = driver.ExecuteScript("return document.getElementById('mat-input-0').value;"); '''

コード内でJavascriptの管理をするのはあまり気が進まないので、Test1のほうをメインで利用し、いかんともしがたい場合だけTest2の方法を検討するという流れが良いと思う。

Tips2:入力がdisableのDatePicker-Inputへの値の入力

Usecase

ExampleのDisabled datepickerのようなケース。
カレンダーの操作で日付を選択する方法は前回の記事で実験済み。
www.kinakomotitti.net
今回は、UIを操作せずに値を入力する方法となる。

Solution

Seleniumでは、Javascriptを実行させる機能がサポートされているため、Javascriptを構築して実行する。

driver.ExecuteScript("document.getElementById('mat-input-9').value='ここに値を入れる。'");

これで、直接値を流し込むことができる。ただし、この方法の場合、値の変更をトリガーとして発火されるイベントなどが実行されない。例としては、同サンプルページのDatepicker input and change eventsがあげられる。こういったシナリオがある場合は、画面から(カレンダーを使うなどして)値を選択するようにしたほうが無難である。

Tips3:ログとしてスクリーンショットを保存する

Usecase

いつの間にかSeleniumスクリーンショットを取得する機能が追加されていた。もとからあったのか・・・?これを使えば簡単にスクリーンショットを残して置ける。自動化するにあたり、どういう操作を行ったかということをテキストのログだけで残すのでは心もとないため、何かあったときのためにも、すべての操作記録をのこすor要所要所でスクリーンショットを残すといった仕組みを入れておいたほうが良いと思う。

Solution

driver.GetScreenshot().SaveAsFile("./FileName.PNG");