目次
インデックス(ゼロベース)、name属性、id属性、またはWebElementで指定されたフレームにフォーカスを移します。このメソッドで取得できるHTML要素はframe、iframeのいずれかの要素です。
- 構文
- Boolean = WebDriver.SwitchToFrame( identifier, timeout, raise )
- 引数
- identifier 必須
- 切り替えるフレームのインデックス、name属性、id属性、WebElement オブジェクトのいずれかを指定
- timeout 省略可
- タイムアウト(単位:ms)。raiseにTrueが指定されている場合、時間が過ぎるとエラーが発生します。
- raise 省略可
- Trueのとき、タイムアウト経過後に例外を発生させる。
- 戻り値
使い方
フレームの数を取得
現在開いているページのiframe要素の数を取得します。
WebElements = WebDriver.FindElementsByTag("iframe")
PRINT WebElements.Count
現在開いているページのframe要素の数を取得します。
WebElements = WebDriver.FindElementsByTag("frame")
PRINT WebElements.Count
現在開いているページのframe要素もしくはiframe要素の数を取得します。WebDriver.SwitchToFrame メソッドの引数にインデックスを指定する場合は、0から以下の結果の値の範囲で指定することで要素を取得できます。
WebElements = WebDriver.FindElementsByCss("frame, iframe")
PRINT WebElements.Count
インデックスからフレームを取得・切り替え
インデックスが0のフレームへ切り替えます。切り替えが出来たかを示すブール値が返り、問題なく切り替えが出来た場合はTrue、切り替えが出来なかった場合はFalseを返します。
PRINT WebDriver.SwitchToFrame(0)
name属性・id属性からフレームを取得・切り替え
WebDriver.SwitchToFrame メソッドの引数に文字列を指定した場合、その文字列に一致するname属性、id属性を持つフレーム要素が取得されます。
以下はname属性もしくはid属性がcontentのフレームに切り替えます。
<iframe src="https://example.com" name="content" height="300" width="300"></iframe>
WebDriver.SwitchToFrame("content")
WebElementオブジェクトからフレームを取得・切り替え
WebElement オブジェクトからフレームを切り替えます。
最初に見つかったクラス名mainのフレームに切り替えます。
<iframe src="https://example.com" class="main" height="300" width="300"></iframe>
WebDriver.SwitchToFrame(WebDriver.FindElementByClass("main"))
以下は阿部寛のホームページで1つ目のフレーム(左側のメニュー)を取得し、リンクテキストが写真集のリンクをクリックします。
以下のHTMLはブログラムの動作に影響ない範囲で簡略化しています。
<html>
<body>
<frameset>
<frame src="menu.htm">
<html>
<body>
<a href="top.htm" target="right" rel="noopener">トップ</a>
<a href="movie/eiga.htm" target="right" rel="noopener">映画出演</a>
<a href="tv/tv.htm" target="right" rel="noopener">ドラマ出演</a>
<a href="stage/butai.htm" target="right" rel="noopener">舞台出演</a>
<a href="photo/photo.htm" target="right" rel="noopener">写真集</a>
<a href="essay/essay.htm" target="right" rel="noopener">出版本</a>
<a href="kanri/kanri.htm" target="right" rel="noopener">管理者</a>
</body>
</html>
</frame>
<frame src="top.htm"></frame>
</frameset>
</body>
</html>
WebDriver.Get("http://abehiroshi.la.coocan.jp/")
WebDriver.SwitchToFrame(WebDriver.FindElementByTag("frame"))
WebElement = WebDriver.FindElementByLinkText("写真集")
WebElement.Click
src属性の値からフレーム要素を特定
frameタグはsrc属性が必須のため、XPathでフレーム要素を特定することもできます。
以下はsrc属性の値がmenu.htmのフレーム要素を取得します。
title属性やname属性で特定したい場合は@srcを@titleや@nameのように変更します。
DIM WebElement = WebDriver.FindElementByXPath("//frame[@src='menu.htm']")
WebDriver.SwitchToFrame(WebElement)
親フレームに戻す
WebDriver.SwitchToFrame メソッドでフレームを切り替えたあと、元のフレームに戻したいときはWebDriver.SwitchToFrame メソッドを使います。
WebDriver.SwitchToParentFrame()