selenium切换页面内窗口 selenium多窗口切换
本教程研究探讨Selenium WebDriver在Java中进行多窗口/标签页操作的机制,并解析代理配置的限制。文章将如何在同一浏览器会话中避免切换焦点,强调一个浏览器会话仅由一个WebDriver实例控制的核心原则。同时,明确指出代理设置仅在浏览器启动时生效且不可在会话中途更改,从而帮助开发者常见的NullPointerException Selenium WebDriver 多窗口/标签页操作
在自动化测试或爬虫场景中,经常需要与浏览器中的多个窗口或标签页进行交互。Selenium WebDriver 提供了一套机制来管理这些窗口。 获取窗口句柄
每个浏览器窗口或标签页都有一个唯一的标识符,称为“窗口句柄”(Window Handle)。我们可以使用以下方法获取它们:driver.getWindowHandle():获取当前聚焦的窗口句柄。driver.getWindowHandles():获取所有当前打开的窗口句柄的集合(集合)。2. 创建新闻或标签页
Selenium 4引入了更方便的方法来创建新的窗口或标签页,并且它们会属于当前的WebDriver会话:driver.switchTo().newWindow(WindowType.TAB):在浏览当前器会话中打开一个新标签页。driver.switchTo().newWindow(WindowType.WINDOW):在当前浏览器会话中打开一个新窗口。
注意需要的是,newWindow()该方法会返回一个WebDriver实例,但这个实例与调用它的原始驱动程序实例实际上是同一个,只是焦点已自动切换到新创建的窗口/标签页。3. 切换窗口焦点
要在不同的窗口或标签页之间进行操作,必须先将WebDriver的焦点切换到目标窗口。
这通过 driver.switchTo().window(String windowHandle) 方法实现:import static org.junit.jupiter.api.Assertions.assertNotEquals;import java.time.Duration;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.WindowType;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;import org.openqa.selenium.support.ui.WebDriverWait;public class MultiWindowOperation { @Test void switchTabsExample() { // 设置 ChromeDriver 路径,请替换为您的实际路径 System.setProperty(quot;webdriver.chrome.driverquot;, quot;F:/drivers/chromedriver.exequot;); WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); // 最大化窗口 try { // 1. 访问第一个 URL driver.get(quot;https://www.google.comquot;); String firstTabHandle = driver.getWindowHandle(); // 保存第一个标签页的句柄 System.out.println(quot;第一个标签页句柄: quot;firstTabHandle); // 2.在同一会话中打开一个新标签页,并自动切换焦点 WebDriver newTabDriver = driver.switchTo().newWindow(WindowType.TAB); newTabDriver.get(quot;https://www.msn.com/quot;); String secondaryTabHandle = newTabDriver.getWindowHandle(); // 保存新标签页的句柄 System.out.println(quot;第二个标签页句柄: quot;secondTabHandle); // 两个验证标签页的句柄是不同的
assertNotEquals(firstTabHandle, secondaryTabHandle); // 等待页面加载完成 waitForPageLoad(newTabDriver); // 3.切换回第一个标签页 driver.switchTo().window(firstTabHandle); System.out.println(quot;已切换登录后复制
以上就是Selenium WebDriver多窗口操作与代理配置深度解析的详细内容,更多请关注乐哥常识网其他相关文章!