全ての画面操作、アプリの操作はキーボードだけで完結させたい!
Webフォームへの入力は、
マウスをほぼ触らずに入力が終わらないようなページは設計不備だと思う杉山です。
Selenium使って、TABキーを押した時と同じ動作をさせたい。とか
Enterキーを押した時と同じ動作をさせたい。なんて事があります。
KeysクラスがSeleniumに含まれているので、それを使いましょう。
で終わってしまうのですが・・・こんな感じに。
Dim ks As New Keys
Dim driver As New ChromeDriverdriver.Get (“https://www.yahoo.co.jp/”)
‘TABキー押下
driver.SendKeys (ks.Tab)
‘Enterキー押下
driver.SendKeys (ks.Enter)
リンクとか、ボタンにフォーカスが当たっているときに、
Spaceキー押下でクリックと同じ様な動きをするので、
WebElement.Click を使わずに、SendKeysでspaceキーを押すという手も使えます。
YahooのトップページをSendKeysだけで操作してみる
YahooJapanのトップページをPCで開くと、
左側に主要なサービス一覧とそのリンクが表示されています。
これらをFindElement~を使わずに、キー操作のみで次々に開く事をやってみよう!
TOPページがこれ
左の主なサービスの”ショッピング”にフォーカス当てるためには、
ページを開いてTABキーを21回押す事でできます。
For i=1 To 21
driver.sendKeys(ks.Tab)
Next
Chromeで新規タブを使ってリンクを開く場合は
Ctrl+Enterでできます。
新規タブでリンクを開いて、次の項目へフォーカスを移動させるのを適当に繰り返します。
For i = 1 To 10
driver.SendKeys ks.Control, ks.Enter
driver.SendKeys (ks.Tab)
Next
全体のコードはこんなんです。
ショッピングからファイナンスまでのリンクを別タブで開いて、
テレビのリンクにフォーカスを動かして終わります。
Dim ks As New Keys
Dim driver As New ChromeDriverdriver.Get (“https://www.yahoo.co.jp/”)
For i = 1 To 21
driver.SendKeys (ks.Tab)
NextFor i = 1 To 10
driver.SendKeys ks.Control, ks.Enter
driver.SendKeys (ks.Tab)
NextMsgBox “記事が短くてつまらなかったわけじゃないよ?”
今回の様に、フォーカスを移動させる(操作要素を指定する)ために
TABキーを押す。のをプログラムで出来ますが、
ページ構成が変わった場合には、全部やり直しです。
対して、idとかnameはページの構成が変わっても変わりにくいものなので、
要素を指定する場合はidやname、cssセレクタなどを使いましょう。
キーボードだけで操作しているのと、同じ動作をSeleniumでも出来ますよ!
ってサンプルなので。
コメント