ClickInterceptedを安定最速に回避したい
「クリック」に失敗することがあります。
▼の暫定対策で回避中です。
☆の価値観で貫いてるシナリオです。
主に★の周辺について、良さげな方法/アイデアを教えてください。
その他、気づき等あればお知らせいただけると嬉しいです。
場面
- Webシステムのモーダル画面
- 日付と時間帯の表
- 希望枠のラジオボタンをクリックする場面
- 表示された1週間分の表が希望枠リストの範囲外の場合等でモーダル画面を一旦閉じたい
- モーダル画面の下にある閉じる/予約ボタンのうち、閉じるボタンを使用中
<button type="button" class="aaa bbb ccc" ng-xxx="cancel()"> 閉じる </button>
- ※ AngularJSがふんだんに使われている、シナリオ作成者泣かせのシステム
- ※ 枠の選択は[搭乗便の選択]に近いイメージ
予約便の変更(航空券購入後の手続き)|ANA
https://www.ana.co.jp/ja/jp/biz/guide/3_6.html
- ☆ Attendedなシナリオで、どうしても安定して最速で駆け抜けたい
症状
- クリックに失敗することがある
- 「SPVエラー情報収集」の理由相当ワードは「element click intercepted」
確認済みの情報
https://winactor.com/questions/question/【wa0028】「spvエラー情報収集」でエラーの詳細を調べ/
https://winactor.com/questions/question/【wa0035】ブラウザ操作のエラー対応方法_「クリック/
https://winactor.com/questions/?q=ブラウザ関連ライブラリのエラーと対策のバリエーション
環境
- WinActor7211
- Chrome10X
- WebDriver制御
- ChromeDriverもChromeと全桁同じバージョン
現状に至る経緯
- Loadingのぐるぐる終了待ちは「属性値取得」で満足に近い精度で制御できるようになった
- Ver730未満なので、「状態変化待機(要素)」が使えない
https://winactor.com/questions/question/【wa0115】ライブラリ「状態変化待機要素」の待機条/
- この3つを担保したい
- 1)Xpathで指定される要素が取得されるまで
- 3)指定した要素が表示されるまで
- 5)指定した要素が有効になるまで
- 1)Xpathで指定される要素が取得されるまで
- 代わりに3つをがっちゃんこしたライブラリを使用中
- 「要素数取得」:1以上(SeleniumのPresent相当のつもり)
Selenium IDE コマンドリファレンス (2019/09版 : Selenium IDE v3.12.0 [全96コマンドを徹底解説]) #テスト - Qiita
https://qiita.com/oh_rusty_nail/items/77782973b4152992017b#assert-element-present--verify-element-present
https://winactor.com/questions/question/【wa0048】23_ブラウザ関連の「要素数取得」の使い方/ - 「有効無効状態取得」:有効(SeleniumのEnabled相当のつもり)
- 「属性値取得」:disabled属性の値がFalse
【Selenium】要素の有効・無効(disabledの有無)を判定する:is_enabled() | OFFICE54
https://office54.net/python/scraping/selenium-is-enabled - 「属性値取得」のがっちゃんこは不要だったのかも、、
- 「要素数取得」:1以上(SeleniumのPresent相当のつもり)
https://winactor.com/questions/question/ページ上部に戻ってクリックを作ってみた/
★ 伺いたいこと
- 「要素数取得」「有効無効状態取得」「属性値取得」以外を組み合わせる余地
- なるべく迂回せずに(安定かつ最速で)「element click intercepted」を回避する方法
▼ 試したこと
- 手前でたとえば1秒待機すればクリックに成功する
★ 原因の見立て
- 事実とリファレンスを総合すると、要素の配置が完全に済むまでに要素どうしが重なってる瞬間があったりするのかも
- 見えないからイマイチ信用し切れず
- この瞬間、どうにかして視認できないだろうか
- 工夫の余地はないものか
https://winactor.com/questions/question/フレームを可視化してみた/ - たとえば自前CSSを優先適用させて色を着ければ、Present/Enabled/Disabledあたりも区別できるようになるのかどうか
- たとえば邪魔してる要素をずらすとか最前面にするみたいなアクティブな攻めかたはないものか
▼ きっと有効な抜本対策
- JavaScriptで要素をクリック
https://winactor.com/questions/question/クリックに失敗する箇所がjavascriptで乗り越えられた/
document.querySelector('button[属性="値"]:contains("テキスト")').click();
テキストに日本語を含められず見送り
document.querySelector('button[属性="値"]').click();
button内の属性までで一意になったのでひとまず使えそう
XPathと同様にquerySelectorも極め甲斐がありそう - JavaScriptの実行に数パーツを割くなら待機の易きに流れちゃいたい気持ちも
Webページ全体を画像として保存するサンプルシナリオ
https://winactor.biz/samplescenario/2022/04/25_5388.html
https://winactor.com/questions/question/アドレスバーからjavascriptを実行してみた/
https://winactor.com/questions/question/ページ上部に戻ってクリックを作ってみた/ - JohnさんアプローチのAPI版は速そう
- 同梱ライブラリを組み合わせるアプローチでも速いのかどうか時間を見つけて実感予定
▼ 投稿前の気づきとテスト
- モーダル画面は右上の×ボタンでも閉じられる
- document.querySelector('span[属性="値"]').click();
→ 閉じられた - フロー内でも安定して閉じられた
- JavaScript強し
- 数パーツを割いたからやっぱり待機と比べちゃう
改めての希望
- 「現状に至る経緯」と「★ 伺いたいこと」の延長線上で、あとひとつくらい何かがどうにかなるのさえ待てば、安定最速で駆け抜けられそう
- できればそれを掘り当てたい