Selenium 简明教程

Selenium WebDriver - Browsing Context

Selenium Webdriver 可用于浏览上下文。有多个 API 用于浏览器上下文命令。使用浏览上下文可以执行的一些操作包括打开新窗口、标签页、利用已打开的窗口、打开 URL 等。

Selenium Webdriver can be used for Browsing Context. There are multiple APIs which are used for the browser context commands. Some of the operations which can be performed using the Browsing Context are opening a new window, tab, utilizing an already opened window, opening a URL, and so on.

Create Browsing Context

要创建浏览上下文,我们将使用 ChromeOptions 类,然后将功能 webSocketUrl 设置为 true 值,并将它的引用传递给 Webdriver。请注意,我们还需要导入以下语句才能使用浏览上下文的这些方法。

In order to create a Browsing Context, we would use the ChromeOptions class, then set the capability webSocketUrl to the true value and pass its reference to the Webdriver. Please Note, We would also need to import the below statement in order to use the methods of the Browsing Context.

import org.openqa.selenium.bidi.browsingcontext.BrowsingContext.

在使用浏览上下文命令的 API 运行测试时,将打开一个带有 title BiDi-CDP Mapper 并带有消息 - BiDi-CDP Mapper is controlling this tab along with the debug information 的标签页。这将证明自动化测试正在使用浏览上下文。

While tests are running using the APIs on browsing context commands, there would be one tab opened with the title BiDi-CDP Mapper having the message - BiDi-CDP Mapper is controlling this tab along with the debug information. This would prove that the automation tests are using the Browsing Context.

selenium webdriver browsing context 1

下一个标签页会打开由自动化测试触发的应用程序。

The next tab would open the application triggered from the automation test.

selenium webdriver browsing context 2

Selenium 中的浏览上下文是一个从 Selenium 4.x 版本开始提供的功能。要利用浏览器上下文命令中的所有 API,建议使用 Selenium 4.16.x 版本中的 Selenium Maven 依赖。

The Browsing Context is Selenium is a feature available from the Selenium 4.x version. To utilize all the APIs on the browser context commands, it is recommended to use the Selenium Maven dependency from Selenium 4.16.x versions.

要添加到 pom.xml 的浏览上下文依赖

Dependencies To Be Added To pom.xml For Browsing Context

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>
   <groupId>org.example</groupId>
   <artifactId>SeleniumJava</artifactId>
   <version>1.0-SNAPSHOT</version>

   <properties>
      <maven.compiler.source>16</maven.compiler.source>
      <maven.compiler.target>16</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>

   <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
   <dependencies>
      <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>4.16.1</version>
      </dependency>

      <!-- https://mvnrepository.com/artifact/org.testng/testng -->
      <dependency>
         <groupId>org.testng</groupId>
         <artifactId>testng</artifactId>
         <version>7.9.0</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

Create Browsing Context in New Window and Navigate to URL

让我们看一个示例,在该示例中,我们将打开一个浏览器,然后打开另一个新窗口并启动一个包含以下 URL 的应用程序以创建浏览上下文 -

Let us take an example where we would open a browser, then open another new window and launch an application having the below URL to create the Browsing Context −

BrowsingContextNewWindows.java 中的代码实现

Code Implementation in BrowsingContextNewWindows.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.NavigationResult;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextNewWindows {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // open browsing context in new window
      BrowsingContext bc = new BrowsingContext(driver, WindowType.WINDOW);

      // obtain id of browsing context in new window
      String text = bc.getId();
      System.out.println("Id of browsing context in new window: " + text);

      // navigate to new url in the new window
      NavigationResult i = bc.navigate("https://www.tutorialspoint.com/selenium/practice/buttons.php");

      // get new URL opened in the new window
      System.out.println("Get URL: " + i.getUrl());

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Id of browsing context in new window:
14CC57B70B48D044482821778B560618
Get URL:
https://www.tutorialspoint.com/selenium/practice/buttons.php

Process finished with exit code 0

在上面的示例中,我们打开了一个浏览器,然后打开了另一个新窗口并启动了一个包含以下 URL 的应用程序以创建浏览上下文。我们获取了新窗口的浏览上下文 id 并在控制台中启动带有消息 - Id of browsing context in new window: 14CC57B70B48D044482821778B560618Get URL: https://www.tutorialspoint.com/selenium/ 的 URL。

In the above example, we had opened a browser, then opened another new window and launched an application having the below URL to create the Browsing Context. We had obtained the browsing context id of the new window and the URL launched in the console with messages - Id of browsing context in new window: 14CC57B70B48D044482821778B560618 and Get URL: https://www.tutorialspoint.com/selenium/.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Create Browsing Context in New Tab and Navigate to URL

让我们看一个示例,在该示例中,我们将打开一个浏览器,然后打开另一个新标签页并在其中启动一个包含以下 URL 的应用程序以创建浏览上下文 - https://www.tutorialspoint.com/selenium/

Let us take an example where we would open a browser, then open another new tab and launch an application having the below URL there to create the Browsing Context − https://www.tutorialspoint.com/selenium/.

BrowsingContextNewTabs.java 中的代码实现

Code Implementation in BrowsingContextNewTabs.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.NavigationResult;
import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextNewTabs {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // open browsing context in new tab
      BrowsingContext bc = new BrowsingContext(driver, WindowType.TAB);

      // obtain id of browsing context in new tab
      String text = bc.getId();
      System.out.println("Id of browsing context in new tab: " + text);

      // navigate to new url in the new tab in readiness state
      NavigationResult i = bc.navigate("https://www.tutorialspoint.com/selenium/practice/buttons.php",
      ReadinessState.COMPLETE);

      // get new URL opened in the new tab
      System.out.println("Get URL: " + i.getUrl());

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Id of browsing context in new tab:
E7D9C6C1EA830EE2E968EFFDAE800EE2
Get URL:
 https://www.tutorialspoint.com/selenium/practice/buttons.php

Process finished with exit code 0

在上面的示例中,我们打开了一个浏览器,然后打开了一个新标签页并在其中启动了一个包含以下 URL 的应用程序以创建浏览上下文。我们获取了新标签页的浏览上下文 id 并在控制台中启动带有消息 - Id of browsing context in new tab: E7D9C6C1EA830EE2E968EFFDAE800EE2Get URL: https://www.tutorialspoint.com/selenium/ 的 URL。

In the above example, we had opened a browser, then opened another new tab and launched an application having the below URL to create the Browsing Context. We had obtained the browsing context id of the new tab and the URL launched in the console with messages - Id of browsing context in new tab: E7D9C6C1EA830EE2E968EFFDAE800EE2 and Get URL: https://www.tutorialspoint.com/selenium/.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Create Browsing Context Using Existing Window/Tab Handle

让我们看一个示例,在该示例中,我们将使用现有的窗口/标签页创建浏览上下文。

Let us take an example where we would create a Browsing Context using an existing window/tab.

BrowsingContextNewTab.java 中的代码实现

Code Implementation in BrowsingContextNewTab.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextNewTab {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // get window handle id
      String windowID = driver.getWindowHandle();

      // open browsing context in new tab/window
      BrowsingContext bc = new BrowsingContext(driver, windowID);

      // obtain id of browsing context in new tab/window
      String text = bc.getId();
      System.out.println("Id of browsing context in new tab/window: " + text);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Id of browsing context in new tab/window:
E5EB8BA6EBAFBA14561CC8EB23360034

Process finished with exit code 0

在上面的示例中,我们使用现有的窗口/标签页句柄创建了浏览上下文。我们通过消息 - Id of browsing context in new/window: E5EB8BA6EBAFBA14561CC8EB23360034 从控制台中获取了浏览上下文 id。

In the above example, we had created the Browsing Context using an existing window/tab handle. We had obtained the browsing context id in the console with message - Id of browsing context in new/window: E5EB8BA6EBAFBA14561CC8EB23360034.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Create Browsing Context After Opening New Window Having Reference Browsing Context

让我们看一个示例,在该示例中,我们将通过打开具有引用浏览上下文的窗口创建浏览上下文。

Let us take an example where we would create a Browsing Context by opening a new window having a reference browsing context.

BrowsingContextNewWindow.java 中的代码实现

Code Implementation in BrowsingContextNewWindow.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextNewWindow {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // get window handle id
      String windowID = driver.getWindowHandle();

      // open browsing context in new window using  browsing context
      BrowsingContext bc = new BrowsingContext(driver, WindowType.WINDOW, windowID);

      // obtain id of browsing context
      String text = bc.getId();
      System.out.println("Id of browsing context in new window: " + text);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Id of browsing context in new window:
F82CF86144C26AEA4168F672C11B8C92

Process finished with exit code 0

在上面的示例中,我们通过打开一个具有引用浏览上下文的窗口来创建浏览上下文。我们通过消息 - Id of browsing context in window: F82CF86144C26AEA4168F672C11B8C92 从控制台中获取了浏览上下文 id。

In the above example, we had created the Browsing Context after opening a new window having a reference browsing context. We had obtained the browsing context id in the console with message - Id of browsing context in window: F82CF86144C26AEA4168F672C11B8C92.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Create Browsing Context After Opening New Tab Having Reference Browsing Context

让我们举一个例子,在这个例子中,我们会通过打开一个带有参考浏览上下文的标签页,来创建一个浏览上下文。

Let us take an example where we would create a Browsing Context by opening a new tab having a reference browsing context.

BrowsingContextNewTab.java 中的代码实现

Code Implementation in BrowsingContextNewTab.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextNewTab {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // get window handle id
      String windowID = driver.getWindowHandle();

      // open browsing context in new tab using browsing context
      BrowsingContext bc = new BrowsingContext(driver, WindowType.TAB, windowID);

      // obtain id of browsing context
      String text = bc.getId();
      System.out.println("Id of browsing context in new tab: " + text);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Id of browsing context in new tab:
C88F54A24AF3C6DE71C5B5E37913BA77

Process finished with exit code 0

在上面的例子中,我们在打开一个带有参考浏览上下文的标签页之后,创建了浏览上下文。我们在控制台中通过消息 - Id of browsing context in tab: C88F54A24AF3C6DE71C5B5E37913BA77 ,获得了浏览上下文 ID。

In the above example, we had created the Browsing Context after opening a new tab having a reference browsing context. We had obtained the browsing context id in the console with message - Id of browsing context in tab: C88F54A24AF3C6DE71C5B5E37913BA77.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Get the Browsing Context Tree

让我们举一个例子,在这个例子中,我们将从父浏览上下文开始,获得每个浏览上下文。

Let us take an example where we would obtain every browsing context starting from the parent browsing context.

BrowsingContextTree.java 中的代码实现

Code Implementation in BrowsingContextTree.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContextInfo;
import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.util.List;
import java.util.concurrent.TimeUnit;
public class BrowsingContextTree {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // get window handle id
      String windowID = driver.getWindowHandle();

      // open browsing context in new tab/window
      BrowsingContext bc = new BrowsingContext(driver, windowID);

      // open another URL
      bc.navigate("https://www.tutorialspoint.com/selenium/practice/buttons.php", ReadinessState.COMPLETE);

      // list of browsing context tree
      List<BrowsingContextInfo> tree = bc.getTree();

      // obtain total browsing context tree
      int size = tree.size();
      System.out.println("Total browsing contexts: " + size);

      // obtain total children
      BrowsingContextInfo c = tree.get(0);
      int size1 = c.getChildren().size();
      System.out.println("Total children: " + size1);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Total browsing contexts: 1
Total children: 0

Process finished with exit code 0

Get the Browsing Context Tree with Depth Value

让我们举一个例子,在这个例子中,我们将从父浏览上下文开始,获得每个浏览上下文,以及深度值。

Let us take an example where we would obtain every browsing context starting from the parent browsing context along with depth value.

BrowsingContextTreeDepth.java 中的代码实现

Code Implementation in BrowsingContextTreeDepth.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContextInfo;
import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.util.List;
import java.util.concurrent.TimeUnit;

public class BrowsingContextTreeDepth {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // get window handle id
      String windowID = driver.getWindowHandle();
      System.out.println("Window Handle Id: " + windowID);

      // open browsing context in new tab/window
      BrowsingContext bc = new BrowsingContext(driver, windowID);

      // open another URL
      bc.navigate("https://www.tutorialspoint.com/selenium/practice/buttons.php", ReadinessState.COMPLETE);

      // list of browsing context tree with depth value
      List<BrowsingContextInfo> tree = bc.getTree(0);

      // obtain total browsing context tree
      int size = tree.size();
      System.out.println("Total browsing contexts: " + size);

      // obtain total children
      BrowsingContextInfo c = tree.get(0);
      List children = c.getChildren();
      System.out.println("Total children: " + children);
      System.out.println("Browsing Context id: " + c.getId());

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Window Handle Id: DE5E963CFFCC9A42A5F7A4903BF0C12C
Total browsing contexts: 1
Total children: null
Browsing Context id: DE5E963CFFCC9A42A5F7A4903BF0C12C

Process finished with exit code 0

Get All the Top Level Browsing Contexts

让我们举一个例子,在这个例子中,我们将获得每个顶级浏览上下文。

Let us take an example where we would obtain every top level browsing contexts.

BrowsingContextTopLevel.java 中的代码实现

Code Implementation in BrowsingContextTopLevel.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContextInfo;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class BrowsingContextTopLevel {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // get window handle id
      String windowID = driver.getWindowHandle();

      // open browsing context in new tab/window
      BrowsingContext bc1 = new BrowsingContext(driver, windowID);

      // open another browsing context in new window
      BrowsingContext bc2 = new BrowsingContext(driver, WindowType.WINDOW);

      // list of every top level browsing contexts
      List<BrowsingContextInfo> tree = bc1.getTopLevelContexts();

      // obtain total browsing context tree
      int size = tree.size();
      System.out.println("Total top level browsing context: " + size);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Total top level browsing context: 2

Process finished with exit code 0

在上面的例子中,我们在控制台中通过消息 - Total top level browsing context: 2 ,获得了所有的顶级浏览上下文。

In the above example, we obtained all the top level browsing contexts in the console with message - Total top level browsing context: 2.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Close a Window Browsing Context

让我们举一个例子,在这个例子中,我们将使用 close() 方法关闭一个窗口浏览上下文。

Let us take an example where we would close a window browsing context using the close() method.

BrowsingContextWindowClose.java 中的代码实现

Code Implementation in BrowsingContextWindowClose.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContextInfo;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class BrowsingContextWindowClose {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // open browsing context in new window
      BrowsingContext bc1 = new BrowsingContext(driver, WindowType.WINDOW);

      // open another browsing context in new window
      BrowsingContext bc2 = new BrowsingContext(driver, WindowType.WINDOW);

      // list of every top level browsing contexts
      List<BrowsingContextInfo> tree = bc1.getTopLevelContexts();

      // obtain total browsing context tree
      int size = tree.size();
      System.out.println("Total top level browsing context before closing: " + size);

      // close one browsing context
      bc2.close();

      // obtain total browsing context tree after closing one
      List<BrowsingContextInfo> tree1 = bc1.getTopLevelContexts();
      int size1 = tree1.size();
      System.out.println("Total top level browsing context after closing: " + size1);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Total top level browsing context before closing: 3
Total top level browsing context after closing: 2

Process finished with exit code 0

Close a Tab Browsing Context

让我们举一个例子,在这个例子中,我们将使用 close() 方法关闭一个标签页浏览上下文。

Let us take an example where we would close a tab browsing context using the close() method.

BrowsingContextTabClose.java 中的代码实现

Code Implementation in BrowsingContextTabClose.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContextInfo;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class BrowsingContextTabClose {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // open browsing context in new tab
      BrowsingContext bc1 = new BrowsingContext(driver, WindowType.TAB);

      // open another browsing context in new tab
      BrowsingContext bc2 = new BrowsingContext(driver, WindowType.TAB);

      // list of every top level browsing contexts
      List<BrowsingContextInfo> tree = bc1.getTopLevelContexts();

      // obtain total browsing context tree
      int size = tree.size();
      System.out.println("Total top level browsing context before closing: " + size);

      // close one browsing context
      bc2.close();

      // obtain total browsing context tree after closing one
      List<BrowsingContextInfo> tree1 = bc1.getTopLevelContexts();
      int size1 = tree1.size();
      System.out.println("Total top level browsing context after closing: " + size1);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Total top level browsing context before closing: 3
Total top level browsing context after closing: 2

Process finished with exit code 0

Activate a Browsing Context

让我们举一个例子,在这个例子中,我们将使用 activate() 方法激活一个浏览上下文。

Let us take an example where we would activate a browsing context using the activate() method.

BrowsingContextTabClose.java 中的代码实现

Code Implementation in BrowsingContextTabClose.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextTabClose {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // get window handle id
      String windowID = driver.getWindowHandle();

      // open browsing context
      BrowsingContext bc1 = new BrowsingContext(driver, windowID);

      // open another browsing context in new window
      BrowsingContext bc2 = new BrowsingContext(driver, WindowType.WINDOW);

      // activate browsing context
      bc1.activate();

      // Quitting browser
      driver.quit();
   }
}

Reload a Browsing Context

让我们举一个例子,在这个例子中,我们将重新加载一个浏览上下文,并获得导航 ID 和 URL。

Let us take an example where we would reload a browsing context and obtain the navigation id, and url.

BrowsingContextReload.java 中的代码实现

Code Implementation in BrowsingContextReload.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.NavigationResult;
import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextReload {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/check-box.php");

      // open browsing context in new tab
      BrowsingContext bc = new BrowsingContext(driver, WindowType.TAB);

      // navigate to URL in a browsing context
      bc.navigate("https://www.tutorialspoint.com/selenium/practice/buttons.php", ReadinessState.COMPLETE);

      // reload browsing context
      NavigationResult load = bc.reload(ReadinessState.INTERACTIVE);

      // get navigation id
      String text = load.getNavigationId();
      System.out.println("Navigation ID: " + text);

      // get URL opened in browsing context
      String url = load.getUrl();
      System.out.println("Navigation URL: " + url);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Navigation ID: 0C12BD5C26E08392DB18F6C7928F8020
Navigation URL:
https://www.tutorialspoint.com/selenium/practice/buttons.php

Process finished with exit code 0

在上面的例子中,我们已经重新加载了浏览上下文,并通过控制台中的消息 - Navigation ID: 0C12BD5C26E08392DB18F6C7928F8020Navigation URL: https://www.tutorialspoint.com/selenium/ ,获得了导航 ID 和 URL。

In the above example, we had reloaded the browsing context and had obtained navigation id and url with messages in the console - Navigation ID: 0C12BD5C26E08392DB18F6C7928F8020, and Navigation URL: https://www.tutorialspoint.com/selenium/.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Handle User Prompts with Browsing Context

让我们举一个例子,在这个例子中,我们将使用 handleUserPrompt() 方法,通过浏览上下文处理用户提示。

Let us take an example where we would handle user prompts with browsing context using the handleUserPrompt() method.

BrowsingContextHandlePrompt.java 中的代码实现

Code Implementation in BrowsingContextHandlePrompt.java

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextHandlePrompt {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // get window handle
      String windowID = driver.getWindowHandle();

      // open browsing context
      BrowsingContext bc = new BrowsingContext(driver, driver.getWindowHandle());

      // identify button
      WebElement btn = driver.findElement(By.xpath("/html/body/main/div/div/div[2]/div[1]/button"));
      btn.click();

      // accept and input text in prompt
      bc.handleUserPrompt(true, "Tutorialspoint");

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Process finished with exit code 0

在上面的示例中,我们已经使用 Browsing Context 处理了用户提示。

In the above example, we had handled the user prompt with the Browsing Context.

最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。

Finally, the message Process finished with exit code 0 was received, signifying successful execution of the code.

Capture Screenshots with Browsing Context

让我们举一个示例,在该示例中,我们将使用 captureScreenshot() 方法通过浏览上下文捕获屏幕截图。

Let us take an example where we would capture screenshots with browsing context using the captureScreenshot() method.

BrowsingContextCaptureScreenshot.java 中的代码实现

Code Implementation in BrowsingContextCaptureScreenshot.java

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextCaptureScreenshot {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // get window handle
      String windowID = driver.getWindowHandle();

      // open browsing context
      BrowsingContext bc = new BrowsingContext(driver, driver.getWindowHandle());

      // identify button then click
      WebElement btn = driver.findElement(By.xpath("/html/body/main/div/div/div[2]/div[1]/button"));
      btn.click();

      // capture screenshot
      String sc = bc.captureScreenshot();

      // get number of screenshot
      int size = sc.length();
      System.out.println("Size of Screenshot: " + size);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Size of Screenshots: 209152

Process finished with exit code 0

Capture a Screenshot of an Element with Browsing Context

让我们举一个示例,在该示例中,我们将使用 captureElementScreenshot() 方法通过浏览上下文捕获元素的屏幕截图。

Let us take an example where we would capture a screenshot of an element with browsing context using the captureElementScreenshot() method.

BrowsingContextElemntCaptureScreenshot.java 中的代码实现

Code Implementation in BrowsingContextElemntCaptureScreenshot.java

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebElement;
import java.util.concurrent.TimeUnit;

public class BrowsingContextElemntCaptureScreenshot {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // get window handle
      String windowID = driver.getWindowHandle();

      // open browsing context
      BrowsingContext bc = new BrowsingContext(driver, windowID);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // identify button
      WebElement btn = driver.findElement(By.xpath("/html/body/main/div/div/div[2]/div[1]/button"));

      String sc = bc.captureElementScreenshot(((RemoteWebElement) btn).getId());

      // get number of screenshot
      int size = sc.length();
      System.out.println("Size of Screenshot of an element: " + size);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Size of Screenshot of an element: 3080

Process finished with exit code 0

Set the Viewport Pixel with Browsing Context

让我们举一个示例,在该示例中,我们将使用 setViewport() 方法通过浏览上下文设置一个像素视区。

Let us take an example where we would set a viewport with a pixel with browsing context using the setViewport() method.

SetViewPort.java 中的代码实现

Code Implementation in SetViewPort.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class SetViewPort {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // get window handle
      String windowID = driver.getWindowHandle();

      // open browsing context
      BrowsingContext bc = new BrowsingContext(driver, windowID);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // set view port
      bc.setViewport(200, 600, 6);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Process finished with exit code 0

Print a Page with Browsing Context

让我们举一个示例,在该示例中,我们将使用 print() 方法通过浏览上下文打印页面。

Let us take an example where we would print a page with browsing context using the print() method.

PrintPage.java 中的代码实现

Code Implementation in PrintPage.java

package org.example;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.print.PrintOptions;
import java.util.concurrent.TimeUnit;

public class PrintPage {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // get window handle
      String windowID = driver.getWindowHandle();

      // open browsing context
      BrowsingContext bc = new BrowsingContext(driver, windowID);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      // object of PrintOptions
      PrintOptions p = new PrintOptions();

      // get print
      String print = bc.print(p);

      // Quitting browser
      driver.quit();
   }
}

Navigate, Move Forward, Backward, and Traverse in Browser History with Browsing Context

让我们举一个示例,我们在其中使用浏览上下文在浏览器历史记录中向前、向后移动和遍历。这些操作使用 BrowsingContext 类的 forward()、back() 和 traverse(-1) 方法执行。

Let us take an example where we move forward, backward, and traverse in browser history with browsing context. These are performed using the forward(), back(), and traverse(-1) methods of the BrowsingContext class.

BrowsingContextHistory.java 中的代码实现

Code Implementation in BrowsingContextHistory.java

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.concurrent.TimeUnit;

public class BrowsingContextHistory {
   public static void main(String[] args) throws InterruptedException {

      // object of ChromeOptions
      ChromeOptions opt = new ChromeOptions();
      opt.setCapability("webSocketUrl", true);

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver(opt);

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // get window handle
      String windowID = driver.getWindowHandle();

      // open browsing context
      BrowsingContext bc = new BrowsingContext(driver, windowID);

      // navigate to URL
      bc.navigate("https://www.tutorialspoint.com/selenium/practice/login.php", ReadinessState.COMPLETE);

      // identify element then click
      WebElement btn = driver.findElement(By.xpath("//*[@id='signInForm']/div[3]/a"));
      btn.click();

      // get page title after click
      String title = driver.getTitle();
      System.out.println("Page title after click: " + title);

      // navigate back in browser history
      bc.back();

      // get page title after navigating back in browser history
      String title1 = driver.getTitle();
      System.out.println("Page title after navigating back in browser history: " + title1);

      // navigate forward in browser history
      bc.forward();

      // get page title after navigating forward in browser history
      String title2 = driver.getTitle();
      System.out.println("Page title after navigating forward in browser history: " + title2);


      // traverse history
      bc.traverseHistory(-1);

      // Quitting browser
      driver.quit();
   }
}

它将显示以下内容 output

It will show the following output

Page title after click: Selenium Practice - Register
Page title after navigating back in browser history: Selenium Practice - Login
Page title after navigating forward in browser history: Selenium Practice - Register

Process finished with exit code 0

在上面的示例中,我们启动了一个应用程序并在浏览器历史记录中向后和向前导航,并在控制台中使用消息 - Page title after click: Selenium Practice - Register, Page title after navigating back in browser history: Selenium Practice - LoginPage title after navigating forward in browser history: Selenium Practice - Register 获取导航后的浏览器标题。

In the above example, we had launched an application and navigated back, and, forward in the browser history and obtained the browser title after navigations in the console with the messages - Page title after click: Selenium Practice - Register, Page title after navigating back in browser history: Selenium Practice - Login, and Page title after navigating forward in browser history: Selenium Practice - Register.

这结束了我们对 Selenium WebDriver - 浏览器上下文教程的全面了解。我们首先介绍了什么是浏览器上下文以及浏览器上下文所需的 Selenium 依赖项,然后通过示例在新的窗口和标签中、在新窗口中以及使用现有窗口句柄在标签中创建浏览器上下文,导航到常规和就绪状态的 URL,获取浏览上下文树、其深度以及所有顶级浏览上下文,关闭标签或窗口,激活并重新加载浏览上下文,处理用户提示,捕获网页和特定元素的屏幕截图,使用像素设置视口,打印页面,并在浏览器历史记录中使用 Selenium 向前、向后和遍历导航。

This concludes our comprehensive take on the tutorial on Selenium WebDriver - Browser Context. We’ve started with describing what is Browser Context, and the Selenium dependencies required for the Browser Context, walked through the examples to create Browser Context in a new window and tab, in a new window, and tab using an existing window handle, navigate to a URL in normal and readiness state, obtain browsing context tree, its depth, and all top level browsing contexts, close a tab or window, activate and reload a browsing context, handle user prompt, capture screenshot of a web page, and specific element, set viewport with pixel, print page, and navigate forward, backward, and traversing in browser history with Selenium.

这使您对 Selenium WebDriver - 浏览器上下文有了深入的了解。明智的做法是继续实践您所学的内容并探索与 Selenium 相关的其他内容,以加深您的理解并拓宽您的视野。

This equips you with in-depth knowledge of the Selenium WebDriver - Browser Context. It is wise to keep practicing what you’ve learned and exploring others relevant to Selenium to deepen your understanding and expand your horizons.