5

旧タイトル:ブラウザ関連のウィンドウ制御

このへんも少し掠ります。

https://winactor.com/questions/question/[横流し]失敗しがちな【プルダウン】操作のコ/

https://winactor.com/questions/question/イベントを制す者はクリックを制す/

 

 

要素へのアクションの手前で、ブラウザ関連のウィンドウ制御に苦慮しているかた向けの情報です。
Python+Selenium界のノウハウの横流しです。

 

まだ成功してないかたはこちらからどうぞ。

https://winactor.com/questions/question/ブラウザ関連ライブラリのエラー用yesnoチャート/

フレーム内の要素ならこちらをどうぞ。

https://winactor.com/questions/question/chromeでiframeを選択したい/

https://winactor.com/questions/question/クリック操作について(chrome)/

https://winactor.com/questions/question/xpath-マルチリスト選択%E3%80%80エラー/

 

元ネタ

PythonでSelenium_ウィンドウの切替え失敗とその対処について - アウトプットして苦悩する
https://atc.hateblo.jp/entry/2018/08/07/%23_PythonでSelenium_ウィンドウの切替え失敗とその対処について

主さんが見出した法則

window_handlesの取得順は以下のとおりとなるらしい
index0 : 1(一番最初のウィンドウ)
index1 : 3(最新のウィンドウ)
index2 : 2(最新より1つ前のウィンドウ)★
一番最初のウィンドウは0に、それ以降は新しく開いたウィンドウから割り振られていく

主さんが見出した原因(の1つ)

window_handlesの取得順がたま〜にちぐはぐになってしまっていた★

主さんが見出した解決策の意訳

(idがb1の要素に対するアクションの下準備)
ウィンドウハンドルのインデックスが2より大きくなるまで待機
ウィンドウハンドルを取得
インデックス1に制御を移す

例外処理
 正常系
  idがb1の要素に対してEnter
 異常系
  例外処理
   正常系
    インデックス2に制御を移す
    idがb1の要素に対してEnter
   異常系
    インデックス0に制御を移す
    idがb1の要素に対してEnter

WinActor版の置き換え案

(下準備の考慮も必要なのかも)

例外処理
 正常系
  クリック://*[@id="b1"]
 異常系
  例外処理
   正常系
    次のウィンドウへ移動:最後
    クリック://*[@id="b1"]
   異常系
    次のウィンドウへ移動:最初
    クリック://*[@id="b1"]

 

 

「次のウィンドウへ移動」のスクリプト観察

  • スクリプトのswitchTypeの値が、元ネタのindexの数字の意味と重なるっぽい
  • もし「最新より1つ前のウィンドウ」というオプションが存在するなら、selact caseのバリエーションに加えたらハッピーになれることがあるのかも
  • たとえばこう加工したライブラリをWinActor版の置き換え案に組み込んで使いこなしたら、代替策での回避も不要になったりするのだろうか

1か所追記
switchTypeStr = !異常時の移動先|最初,最後,最後の前!

2行追加

    case "最後の前"
      switchType = 2

 

わたし自身がハードルにブチ当たることがあったら、深堀りを進めてみようと思います。
もし試されたら実感を教えてください。

 

 

関連スレッド

https://winactor.com/questions/question/元ウィンドウにウィンドウクローズが有効だった/

https://winactor.com/questions/question/ウィンドウ識別クリアの動作-クリックできない/

https://winactor.com/questions/question/「次のウィンドウへ移動」で移動しない/

https://winactor.com/questions/question/ブラウザ操作の「次のウィンドウでへ移動」で移/

https://winactor.com/questions/question/意外と知らなかったwinactorのあれこれ⑧~chrome上のタブ/

さいくす 新しいコメントを投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。