ページ上部に戻ってクリックを作ってみた
ブラウザ操作の「クリック」にページ上部に戻る機能を追加してみました。
お裾分けです。
備忘録を兼ねて。
クリック失敗の万一の備え、未然防止に。
クマ除けの鈴程度です。
背景/適用先
- Attendedなシナリオ
- 実行者が邪魔し放題な運用
https://winactor.com/questions/question/シナリオ実行中にブラウザのズームを変更したい/
対象の要素が現在のスクロール位置より上にある
https://winactor.com/questions/question/画面に見えていないボタンのクリックはxpathでクリ/
- 実運用中にこれが原因のエラーに遭遇
- 「クリック」にページ上部に戻る機能を追加することで対処
- わたし自身はなかなかエラーを再現できず、原因特定にかなり時間を要した
「クリック」ライブラリの先頭に追加した3行コード
'指定ウィンドウにHomeキーを送信
Set wshShell = CreateObject("WScript.Shell")
wshShell.AppActivate(!ページタイトル!)
wshShell.SendKeys "{HOME}"
リファレンス
SendKeys (WshShell オブジェクト) - WSH@Workshop
http://wsh.style-mods.net/ref_wshshell/sendkeys.htm
編集後記
- @ウィンドウ識別名@を使ったほうがカッコイイのかも
- スクリプト加工なんてせずに「ウィンドウ前面化」を使えば良いハナシ
- さらには「エミュレーション」だけでも成り立つ場面
- すべての「クリック」手前にパーツを追加するとオーバーヘッドが嵩む
https://winactor.com/questions/question/条件分岐、分岐で攻めるか、多分岐で攻めるか/
- やはり「クリック」内がベターっぽい
クリック対象のページタイトルが動的で、シナリオ内で取得したい場合の併用ライブラリ案
- ウィンドウタイトル取得
シチュエーションの考慮
- そもそもシナリオの流れで目的のウィンドウが最前面なら、改めてアクティブにする必要はない
- この1行だけでOK
CreateObject("WScript.Shell").SendKeys "{HOME}"
- WebDriver制御のブラウザは最小化してても動く
- SendKeysは最前面のアクティブウィンドウに送られる
- ブラウザを非アクティブにしてたり最小化してると、クリックしたいブラウザにHOMEが届かない
- 人が割り込む余地があるなら、やはりAppActivate入りが無難
ちょい関連スレッド
https://winactor.com/questions/question/エミュレーション文字列送信ハイブリッド進化版/
淡い期待
- ウィンドウタイトル、識別ルールに頼らず、ウィンドウハンドルで制御するステキなコードを誰かが教えてくれるはず
別解1
- URLの末尾に#を追記してEnter
リファレンス
CSSだけで簡単にトップに戻るボタンを作る方法 - TERUCODE
https://terucode.com/page-top-button/
htmlのみの「ページトップへ戻る」の作り方【CSSなし!】
https://csshtml.work/html-go-top/
これで見つけました。
ライブラリ加工案
- 「クリック」のスクリプトの先頭に「ページ表示」のスクリプトを移植
- 末尾に#を添えるようにスクリプトを加工
- ※ 速いなら乗り換えるかも
併用ライブラリ案
ブラウザ操作(URL取得)
https://winactor.biz/sweet/2022/04/25_5369.html
淡い期待
- 誰かが颯爽と1ライブラリ化してくれるはず
別解2
- JavaScriptワンライナーでトップに戻る
トップに戻るスクリプト
window.scroll({top: 0});
リファレンス
window.scroll - Web API | MDN
https://developer.mozilla.org/ja/docs/Web/API/Window/scroll
【JavaScript】 クリックすると画面の一番上までスクロールする仕様
https://zenn.dev/kosuke_shopify/articles/9f07a76092bd9c
アドレスバーでテスト
javascript:window.scroll({top: 0});
- ◎ 爆速
ちょっとカッコイイやつ
javascript:window.scroll({top: 0, behavior: "smooth"});
WinActorからのJavaScript実行方法の例
https://winactor.com/questions/question/アドレスバーからjavascriptを実行してみた/
javascript:window.scroll({top: 0});
- ▲ オーバーヘッドが嵩みがち
淡い期待
- そろそろスイートライブラリあたりに「ブラウザ操作(JavaScript実行)」登場するはず