Selenium 简明教程
Selenium WebDriver - Browsing Context
Selenium Webdriver 可用于浏览上下文。有多个 API 用于浏览器上下文命令。使用浏览上下文可以执行的一些操作包括打开新窗口、标签页、利用已打开的窗口、打开 URL 等。
Create Browsing Context
要创建浏览上下文,我们将使用 ChromeOptions 类,然后将功能 webSocketUrl 设置为 true 值,并将它的引用传递给 Webdriver。请注意,我们还需要导入以下语句才能使用浏览上下文的这些方法。
import org.openqa.selenium.bidi.browsingcontext.BrowsingContext.
在使用浏览上下文命令的 API 运行测试时,将打开一个带有 title BiDi-CDP Mapper 并带有消息 - BiDi-CDP Mapper is controlling this tab along with the debug information 的标签页。这将证明自动化测试正在使用浏览上下文。
下一个标签页会打开由自动化测试触发的应用程序。
Selenium 中的浏览上下文是一个从 Selenium 4.x 版本开始提供的功能。要利用浏览器上下文命令中的所有 API,建议使用 Selenium 4.16.x 版本中的 Selenium Maven 依赖。
要添加到 pom.xml 的浏览上下文依赖
<?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 的应用程序以创建浏览上下文 -
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 :
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: 14CC57B70B48D044482821778B560618 和 Get URL: https://www.tutorialspoint.com/selenium/ 的 URL。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Create Browsing Context in New Tab and Navigate to URL
让我们看一个示例,在该示例中,我们将打开一个浏览器,然后打开另一个新标签页并在其中启动一个包含以下 URL 的应用程序以创建浏览上下文 - https://www.tutorialspoint.com/selenium/ 。
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 :
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: E7D9C6C1EA830EE2E968EFFDAE800EE2 和 Get URL: https://www.tutorialspoint.com/selenium/ 的 URL。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Create Browsing Context Using Existing Window/Tab Handle
让我们看一个示例,在该示例中,我们将使用现有的窗口/标签页创建浏览上下文。
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 :
Id of browsing context in new tab/window:
E5EB8BA6EBAFBA14561CC8EB23360034
Process finished with exit code 0
在上面的示例中,我们使用现有的窗口/标签页句柄创建了浏览上下文。我们通过消息 - Id of browsing context in new/window: E5EB8BA6EBAFBA14561CC8EB23360034 从控制台中获取了浏览上下文 id。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Create Browsing Context After Opening New Window Having Reference Browsing Context
让我们看一个示例,在该示例中,我们将通过打开具有引用浏览上下文的窗口创建浏览上下文。
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 :
Id of browsing context in new window:
F82CF86144C26AEA4168F672C11B8C92
Process finished with exit code 0
在上面的示例中,我们通过打开一个具有引用浏览上下文的窗口来创建浏览上下文。我们通过消息 - Id of browsing context in window: F82CF86144C26AEA4168F672C11B8C92 从控制台中获取了浏览上下文 id。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Create Browsing Context After Opening New Tab Having Reference Browsing Context
让我们举一个例子,在这个例子中,我们会通过打开一个带有参考浏览上下文的标签页,来创建一个浏览上下文。
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 :
Id of browsing context in new tab:
C88F54A24AF3C6DE71C5B5E37913BA77
Process finished with exit code 0
在上面的例子中,我们在打开一个带有参考浏览上下文的标签页之后,创建了浏览上下文。我们在控制台中通过消息 - Id of browsing context in tab: C88F54A24AF3C6DE71C5B5E37913BA77 ,获得了浏览上下文 ID。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Get the Browsing Context Tree
让我们举一个例子,在这个例子中,我们将从父浏览上下文开始,获得每个浏览上下文。
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 :
Total browsing contexts: 1
Total children: 0
Process finished with exit code 0
Get the Browsing Context Tree with Depth Value
让我们举一个例子,在这个例子中,我们将从父浏览上下文开始,获得每个浏览上下文,以及深度值。
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 :
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
让我们举一个例子,在这个例子中,我们将获得每个顶级浏览上下文。
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 :
Total top level browsing context: 2
Process finished with exit code 0
在上面的例子中,我们在控制台中通过消息 - Total top level browsing context: 2 ,获得了所有的顶级浏览上下文。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Close a Window Browsing Context
让我们举一个例子,在这个例子中,我们将使用 close() 方法关闭一个窗口浏览上下文。
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 :
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() 方法关闭一个标签页浏览上下文。
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 :
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() 方法激活一个浏览上下文。
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。
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 :
Navigation ID: 0C12BD5C26E08392DB18F6C7928F8020
Navigation URL:
https://www.tutorialspoint.com/selenium/practice/buttons.php
Process finished with exit code 0
在上面的例子中,我们已经重新加载了浏览上下文,并通过控制台中的消息 - Navigation ID: 0C12BD5C26E08392DB18F6C7928F8020 和 Navigation URL: https://www.tutorialspoint.com/selenium/ ,获得了导航 ID 和 URL。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Handle User Prompts with Browsing Context
让我们举一个例子,在这个例子中,我们将使用 handleUserPrompt() 方法,通过浏览上下文处理用户提示。
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 :
Process finished with exit code 0
在上面的示例中,我们已经使用 Browsing Context 处理了用户提示。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Capture Screenshots with Browsing Context
让我们举一个示例,在该示例中,我们将使用 captureScreenshot() 方法通过浏览上下文捕获屏幕截图。
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 :
Size of Screenshots: 209152
Process finished with exit code 0
Capture a Screenshot of an Element with Browsing Context
让我们举一个示例,在该示例中,我们将使用 captureElementScreenshot() 方法通过浏览上下文捕获元素的屏幕截图。
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 :
Size of Screenshot of an element: 3080
Process finished with exit code 0
Set the Viewport Pixel with Browsing Context
让我们举一个示例,在该示例中,我们将使用 setViewport() 方法通过浏览上下文设置一个像素视区。
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 :
Process finished with exit code 0
Print a Page with Browsing Context
让我们举一个示例,在该示例中,我们将使用 print() 方法通过浏览上下文打印页面。
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) 方法执行。
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 :
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 - Login 和 Page title after navigating forward in browser history: Selenium Practice - Register 获取导航后的浏览器标题。
这结束了我们对 Selenium WebDriver - 浏览器上下文教程的全面了解。我们首先介绍了什么是浏览器上下文以及浏览器上下文所需的 Selenium 依赖项,然后通过示例在新的窗口和标签中、在新窗口中以及使用现有窗口句柄在标签中创建浏览器上下文,导航到常规和就绪状态的 URL,获取浏览上下文树、其深度以及所有顶级浏览上下文,关闭标签或窗口,激活并重新加载浏览上下文,处理用户提示,捕获网页和特定元素的屏幕截图,使用像素设置视口,打印页面,并在浏览器历史记录中使用 Selenium 向前、向后和遍历导航。
这使您对 Selenium WebDriver - 浏览器上下文有了深入的了解。明智的做法是继续实践您所学的内容并探索与 Selenium 相关的其他内容,以加深您的理解并拓宽您的视野。