Seleniumの使い方 - ウィンドウ・タブ操作

新しいウィンドウ・新しいタブの作成

新しいウィンドウ・タブを作成して、アクティブにする方法です。

						Private Sub btnNewWindow_Click(sender As Object, e As EventArgs) Handles btnNewWindow.Click

							'新規ウィンドウを作成して、そのウィンドウをアクティブにする。
							'以降の制御はこのウィンドウに対して行われる。
							_browser.SwitchTo().NewWindow(WindowType.Window)

						End Sub
					
						Private Sub btnNewTab_Click(sender As Object, e As EventArgs) Handles btnNewTab.Click
					
							'新規タブを作成して、そのタブをアクティブにする。
							'以降の制御はこのウィンドウに対して行われる。
							'複数のウィンドウを表示していた場合にタブを作成すると、最初のウィンドウに対してタブが追加される。
							_browser.SwitchTo().NewWindow(WindowType.Tab)
					
						End Sub
					
						private void btnNewWindow_Click(object sender, EventArgs e)
						{
							//新規ウィンドウを作成して、そのウィンドウをアクティブにする。
							//以降の制御はこのウィンドウに対して行われる。
							_browser.SwitchTo().NewWindow(WindowType.Window);
						}
				
						private void btnNewTab_Click(object sender, EventArgs e)
						{
							//新規タブを作成して、そのタブをアクティブにする。
							//以降の制御はこのウィンドウに対して行われる。
							//複数のウィンドウを表示していた場合にタブを作成すると、最初のウィンドウに対してタブが追加される。
							_browser.SwitchTo().NewWindow(WindowType.Tab);
						}
					

参考

新しいウィンドウ(または)新しいタブを作成して切り替える

操作対象の切り替え

Seleniumが操作対象としているウィンドウ・タブを切り替えることで、他のウィンドウ・タブを操作することができます。

_browser.CurrentWindowHandleメソッドで、Selenimuが操作対象としているウィンドウ・タブのウィンドウハンドル(一意の識別子)を取得できます。
_browser.WindowHandlesメソッドで、Selenimuが操作可能な全てのウィンドウ・タブのウィンドウハンドルのリストを取得できます。

ウィンドウ・タブを切り替える場合は、_browser.SwitchTo().Window(window)メソッドの引数にウィンドウハンドルを指定を指定します。

						Private Sub btnChange_Click(sender As Object, e As EventArgs) Handles btnChange.Click

							'アクティブなブラウザのウィンドウハンドルを保持する
							Dim originalWindow As String = _browser.CurrentWindowHandle

							'他のウィンドウをアクティブにする
							For Each window As String In _browser.WindowHandles

								If originalWindow <> window Then

									_browser.SwitchTo().Window(window)
									Exit For

								End If
							Next
							MessageBox.Show("ウィンドウ・タブの切り替え")

							'最初に開いたウィンドウ・タブに切り替える
							_browser.SwitchTo().Window(_browser.WindowHandles.First)
							MessageBox.Show("最初に開いたウィンドウ・タブ")
					
							'最後に開いたウィンドウ・タブに切り替える
							_browser.SwitchTo().Window(_browser.WindowHandles.Last)
							MessageBox.Show("最後に開いたウィンドウ・タブ")

						End Sub
					
						private void btnChange_Click(object sender, EventArgs e)
						{
							//アクティブなブラウザのウィンドウハンドルを保持する
							string originalWindow = _browser.CurrentWindowHandle;
				
							//他のウィンドウをアクティブにする
							foreach (string window in _browser.WindowHandles)
							{
								if (originalWindow != window)
								{
									_browser.SwitchTo().Window(window);
									break;
								}
							}
							MessageBox.Show("ウィンドウ・タブの切り替え");

							//最初に開いたウィンドウ・タブに切り替える
							_browser.SwitchTo().Window(_browser.WindowHandles.First());
							MessageBox.Show("最初に開いたウィンドウ・タブ");
				
							//最後に開いたウィンドウ・タブに切り替える
							_browser.SwitchTo().Window(_browser.WindowHandles.Last());
							MessageBox.Show("最後に開いたウィンドウ・タブ");
						}
					

参考

ウィンドウまたはタブの切り替え

ウィンドウのサイズの参照/設定

以下の方法があります。

						Private Sub btnSizeSet_Click(sender As Object, e As EventArgs) Handles btnSizeSet.Click

							'ブラウザのサイズを取得
							Dim size = _browser.Manage().Window.Size
							MessageBox.Show($"{size.Width},{size.Height}")
					
							'ブラウザのサイズを設定
							_browser.Manage().Window.Size = New Size(1024, 768)
					
						End Sub
					
						private void btnSizeReg_Click(object sender, EventArgs e)
						{
							//ブラウザのサイズを取得
							System.Drawing.Size size = _browser.Manage().Window.Size;
							MessageBox.Show($"{size.Width},{size.Height}");

							//ブラウザのサイズを設定
							_browser.Manage().Window.Size = new Size(1024, 768);
						}
					

参考

ウィンドウサイズの取得

ウィンドウの位置の参照/設定

						Private Sub btnSizeReg_Click(sender As Object, e As EventArgs) Handles btnSizeReg.Click

							'ブラウザの位置を取得
							Dim position = _browser.Manage().Window.Position
							MessageBox.Show($"{position.X},{position.Y}")
					
							'ブラウザを移動
							_browser.Manage().Window.Position = New Point(0, 0)
					
						End Sub
					
						private void btnSizeReg_Click(object sender, EventArgs e)
						{
							//ブラウザの位置を取得
							Point position = _browser.Manage().Window.Position;
							MessageBox.Show($"{position.X},{position.Y}");
				
							//ブラウザを移動
							_browser.Manage().Window.Position = new Point(0, 0);
						}
					

参考

ウィンドウの位置を取得

ウィンドウの最大化/最小化/全画面

						Private Sub btnMaxMin_Click(sender As Object, e As EventArgs) Handles btnMaxMin.Click

							'ブラウザの最大化
							_browser.Manage().Window.Maximize()
							MessageBox.Show("最大化")
					
							'ブラウザの最小化
							_browser.Manage().Window.Minimize()
							MessageBox.Show("最小化")
					
							'全画面表示
							_browser.Manage().Window.FullScreen()
							MessageBox.Show("全画面表示")
					
						End Sub
					
						private void btnMaxMin_Click(object sender, EventArgs e)
						{
							//ブラウザの最大化
							_browser.Manage().Window.Maximize();
							MessageBox.Show("最大化");
				
							//ブラウザの最小化
							_browser.Manage().Window.Minimize();
							MessageBox.Show("最小化");
				
							//全画面表示
							_browser.Manage().Window.FullScreen();
							MessageBox.Show("全画面表示");
						}				
					

参考

ウィンドウの最大化

終了処理

Closeメソッドで操作対象のウィンドウ・タブを終了します。
引き続き残るウィンドウ・タブで操作を行う場合は、残っているウィンドウ・タブに操作対象を切り替えてやらないと、NoSuchWindowExceptionが発生する場合があります。

Quitメソッドはブラウザを終了します。

						Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click

							Dim originalWindow = _browser.CurrentWindowHandle
					
							_browser.Close()
					
							'残っているウィンドウ・タブに切り替える
							_browser.SwitchTo().Window(originalWindow)
					
						End Sub
					
						Private Sub btnQuit_Click(sender As Object, e As EventArgs) Handles btnQuit.Click
					
							_browser.Quit()
					
						End Sub
					
						private void btnClose_Click(object sender, EventArgs e)
						{
							_browser.Close();
				
							//残っているウィンドウ・タブに切り替える
							_browser.SwitchTo().Window(_originalWindow);
						}
				
						private void btnQuit_Click(object sender, EventArgs e)
						{
							_browser.Quit();
						}
					

参考

ウィンドウまたはタブを閉じる