0

ブラウザ操作の「クリック」にページ上部に戻る機能を追加してみました。
お裾分けです。
備忘録を兼ねて。
クリック失敗の万一の備え、未然防止に。
クマ除けの鈴程度です。

 
 
背景/適用先

  • Attendedなシナリオ
  • 実行者が邪魔し放題な運用

https://winactor.com/questions/question/シナリオ実行中にブラウザのズームを変更したい/

対象の要素が現在のスクロール位置より上にある

https://winactor.com/questions/question/画面に見えていないボタンのクリックはxpathでクリ/

  • 実運用中にこれが原因のエラーに遭遇
  • 「クリック」にページ上部に戻る機能を追加することで対処
  • わたし自身はなかなかエラーを再現できず、原因特定にかなり時間を要した

 
「クリック」ライブラリの先頭に追加した3行コード

'指定ウィンドウにHomeキーを送信
Set wshShell = CreateObject("WScript.Shell")
wshShell.AppActivate(!ページタイトル!)
wshShell.SendKeys "{HOME}"

 
リファレンス

https://winactor.com/questions/?q=悲しいとき

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/svg関連タグはxpathでは*/

https://winactor.com/questions/question/エミュレーション文字列送信ハイブリッド進化版/

 
淡い期待

  • ウィンドウタイトル、識別ルールに頼らず、ウィンドウハンドルで制御するステキなコードを誰かが教えてくれるはず

 
 
別解1

  • URLの末尾に#を追記してEnter

 
リファレンス

CSSだけで簡単にトップに戻るボタンを作る方法 - TERUCODE
https://terucode.com/page-top-button/

htmlのみの「ページトップへ戻る」の作り方【CSSなし!】
https://csshtml.work/html-go-top/

これで見つけました。

https://www.google.com/search?q=HTML+ページトップに戻る

 

ライブラリ加工案

  • 「クリック」のスクリプトの先頭に「ページ表示」のスクリプトを移植
  • 末尾に#を添えるようにスクリプトを加工
  • ※ 速いなら乗り換えるかも

 
併用ライブラリ案

ブラウザ操作(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実行)」登場するはず
John 回答した質問
回答とコメントは、会員登録(無料)で閲覧できるようになります。