2015年1月22日木曜日

SeleniumVBA(4): 新たに開いたウィンドウを操作する

【概要】

SeleniumVBAで、現在開かれている任意のウィンドウを探す方法(任意のウィンドウを操作する方法)について書きました。
「Webページを操作中、新しくウィンドウが開いた時に、新たに開いたウィンドウを操作したい」といった場面で使えます。

【最初に】

以下のサンプルコードは、SeleniumVBAの基本的な使い方については端折っております。
SeleniumVBAの基本的な使い方については、下記記事にまとめておりますので、ご参照ください。

【サンプルコード】

Webページの操作中に「target=”_blank”」のような属性が指定されたリンクを開いて新しくウィンドウが開いた場合でも、通常は、既存のウィンドウがWebDriverの操作対象となったままとなります。
下記サンプルコードでは、WebDriverの操作対象を、新たに開いたウィンドウに切り替えます。

サンプルコードの処理の流れは以下の通りです。
  1. 現在(既存)のウィンドウハンドルを保存 (7行目)
  2. 新たなウィンドウを開く (9行目)
  3. 既存のウィンドウとは異なるウィンドウ(≒新たなウィンドウ)を探し、 (11~19行目)
    新たなウィンドウに、操作対象を切り替える (15行目)
  4. 新たなウィンドウに対して、適当に操作を行う(16,17行目)
  5. 元のウィンドウに操作対象を戻す (22行目)

【関連するWebDriverのプロパティ・メソッドの概説】

プロパティ
  • WindowHandle
    • 現在操作しているウィンドウハンドル(String型)を取得
  • WindowHandles
    • 現在開いているウィンドウ全てのウィンドウハンドル(String型)を取得
メソッド
  • switchToWindow (windowHandle, Optional timeout)
    • WebDriverの操作対象を第1引数に指定したウィンドウハンドル(String型)に切り替える。
    • 第2引数(オプション)に、タイムアウトまでの時間を指定可能。
    • 戻り値として、自分自身(WebDriver)が返ってくるけど、正直意味が分からない(使い道がない)。