WebDriver:导航到新的浏览器窗口

软件测试 硒2 网络驱动程序 浏览器自动化
2022-02-01 21:49:44

如何在 Selenium WebDriver 中打开新的浏览器窗口?我正在使用 C# 客户端驱动程序,但如果您知道任何语言,我应该能够在 C# 中找到正确的类/方法。在 Stack Overflow 上,我读到无法打开新标签,所以我不会问这个。

例如,这将导航到同一窗口中的新 URL:

public static void DoNavigate(IWebDriver driver, string url)
{
    driver.Navigate().GoToUrl(url);  
    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(Constants.WAIT_TIME));
}
4个回答

不必创建驱动程序对象的新实例。您可以使用 JavaScript 打开一个更快的新窗口。

打开窗口:

IJavaScriptExecutor jscript = driver as IJavaScriptExecutor;
jscript.ExecuteScript("window.open()");

然后切换窗口,使用窗口句柄:

List<string> handles = driver.WindowHandles.ToList<string>();
driver.SwitchTo().Window(handles.Last());

driver.Navigate().GoToUrl(url);

您必须创建驱动程序对象的新实例。这将打开一个新窗口,您可以使用不同的驱动程序对象在窗口之间切换。例如:

IWebDriver driver = new FirefoxDriver();

DoNavigate(driver, "http://google.com");

这是 Clojure 中的一个示例:

(import [org.openqa.selenium.firefox FirefoxDriver])

(let [driver1 (FirefoxDriver.) 
      driver2 (FirefoxDriver.)]
  (.get driver1 "http://www.google.com")
  (.get driver2 "http://sqa.stackexchange.com/q/2701/246")))

以下是我在 VB 中使用 FirefoxDriver 的方法。我为 webdrivers 创建了一个包装器,但是没有包装器它看起来像这样。IWebDriver 有两个句柄控件;CurrentWindowHandle 和 WindowHandle 的集合。WindowHandles 中的句柄按照它们创建的顺序排列,因此获取列表中的最后一个句柄将获得您刚刚打开的窗口。根据我的经验,CurrentWindowHandle 不是新窗口,而是您执行 javascript 命令的窗口。

要打开一个新窗口:

Dim script As String = "window.open()"
Dim jScript As IJavaScriptExecutor = CType(driver, IJavaScriptExecutor).ExecuteScript(script)

要切换到最近打开的窗口:

Dim lastWindowOpened As Integer = driver.WindowHandles.count - 1
driver.SwitchTo().Window(driver.WindowHandles(lastWindowOpened))

关闭或以其他方式对每个句柄执行某些操作:

For Each window In driver.WindowHandles
   driver.SwitchTo().Window(window)
   driver.Close()
Next