わんすけに聞いてみる PowerShell W3C WebDriver APIをPowerShell制御まとめ③

W3C WebDriver APIをPowerShell制御まとめ③

続き、W3C WebDriver APIについてザザザーっと勉強しました。

さて、WebDriverの仕様勉強の完結編。頑張っていきましょー。

 

前提条件
  • 前回に引き続き、PowerShellプロンプトには以下の関数だけロードしている状態で検証を進めていきます。
  • 元ネタはW3C WebDriver APIを参照しながら、ChromeDriverで進めていきます。
  • コマンド単位でうまく動かないところがある場合は、Driverのバージョンを確認してみましょう。

前回のHTML要素の取得と同じく、この関数でelementIdが取得できてるか検証しながらやってきます。

 

さっそく、使い方を見ていきましょう。

 

要素のクリック(Element Click)

リクエスト
(POST) http://localhost:9515/session/{sessionId}/element/{elementId}/click

動いた。要素が見切れていれば見える位置までスクロールしてクリックイベントを発生させてくれるらしい。
なんかいろいろ注意事項かいてある。
DOMでIE操作するのと違って、mouseOverとかmouseDownとかマウス操作関連のイベントを発生させてくれてるみたい。
ただ裏でクリック時の動作をキックしてるんじゃなくてマウスでクリックされたかの様にイベントを辿ってくれてる様だ。
それ故にイベント処理の競合が発生して動き変になる時あるかもよみたいなこと書いてあるぽぃ?

 

要素クリア(Element Clear)

リクエスト
(POST) http://localhost:9515/session/{sessionId}/element/{elementId}/clear

んむ。普通にクリアできた。
これはinputかtextareaみたいな要素向けね。

 

入力フォームにキー入力(Element Send Keys)

リクエスト
(POST) http://localhost:9515/session/{sessionId}/element/{elementId}/value

なるほど、valueプロパティで文字送るんだけど文字列でそのままぶっこむとこんなエラー出る。

status : 61
message : invalid argument: 'value' must be a list

valueは、リストでくれと。
なので、PowerShellだと文字列.ToCharArray()で配列にしてから渡してる。
なんか、普通のブラウザ操作のイメージだとすでに入力されている文字は上書きされて入力されるイメージだけど
WebDriverのブラウザ操作はあくまで開発テストとかが目的に立ち上がってるだけあって
キー入力の操作がトレースされる感じになってるんだって。
keyDownイベントもちゃんと発生する感じになってて、すでに入ってる文字の後ろに追記されたわ。

 

こっから、ドキュメント制御にはいってくよ。

 

ページソースの取得(Get Page Source)

リクエスト
(GET) http://localhost:9515/session/{sessionId}/source

valueに文字列で直接、ページの全ソースが返ってくる。

 

スクリプトの実行(Executing Script)

リクエスト
(POST) http://localhost:9515/session/{sessionId}/execute/sync

よー説明わからんかったから、bodyを@{}でリクエスト送って
とりあえずエラーでなくなるまで補正した(笑)

message=invalid argument: 'script' must be a string
message=invalid argument: 'args' must be a list

scriptとargsというプロパティさえあれば動くようだ。
scriptは見ての通り、Javascriptを書けば実行される。

argsプロパティで渡した配列の引数は、argumentsっていう名前から取り出せるようだ。
固有のスクリプト作っといてパラメータ渡しで他所のサイトにゴニョゴニョ…した使い方ができるな!

とりあえず、returnしとけばレスポンスのvalueに戻り値が取得できた。

Jsonで戻り値返せば複数フィールドも受け取れた。

Send Keysは追記になる仕様だったし、確実にフォーム操作したいなら
スクリプト実行でquerySelectorAllして要素操作したほうが早くて確実かもー?

 

非同期のスクリプト実行(Execute Async Script)

リクエスト
(POST) http://localhost:9515/session/{sessionId}/execute/async

んーーーー。
制御方法がよくわからんな。
非同期の宣言ミスってるとプロンプト戻ってこなくなるし、
Promise制御がうまくハマらなかった。。。
もう少し試して、うまくいったらうまくいったコードで再更新しよう。。。

 

あとは、CookieとActionsの項なんですが・・・
有効利用する方法が思いつきません。。。(;^ω^)
Javascriptの実行ができるなら、大概できそうな気がしてしまいました。
Javascriptの流し込みでどこまでやれるのか、隙を見ていろいろ検証してきたいと思いまーす。

とりあえず、W3C WebDriver APIの勉強はこの辺にしときまーす。

わんすけへ寄付金を送る

このサイトの情報が役に立ったなーって思う方がいらっしゃれば、

是非「わんすけに缶コーヒー1本でもご馳走する」気持ちでポチってあげて下さい?

¥120

「W3C WebDriver APIをPowerShell制御まとめ③」への3件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Related Post