internet-explorer - 有没有办法将 Webdriver 切换到打开新窗口并自动关闭父窗口的新会话?
问题描述
我有一个需要我使用 IE 的测试用例。当我输入 url 时,它会将我导航到一个新的会话窗口,在该窗口中我的 lanID 授权并自动关闭父窗口。所以我无法切换到新打开的窗口。
org.openqa.selenium.NoSuchWindowException:当前焦点窗口已关闭。
解决方案
您可以尝试使用 driver.Quit 方法关闭父窗口,然后创建一个新的 InternetExplorerDriver 实例来打开子窗口。通过使用这种方法,似乎不需要切换窗口。如果我误解了您的问题,请随时告诉我。
driver.Quit 和 driver.Close 方法的区别如下:
driver.close()命令用于关闭当前具有焦点的浏览器窗口。如果只打开一个浏览器,则调用 driver.close() 会退出整个浏览器会话。
driver.quit ()命令调用 driver.dispose 方法,它将关闭所有浏览器窗口并终止 WebDriver 会话。如果我们在程序结束时不使用 quit(),WebDriver 会话将无法正常关闭。
请检查以下示例:
private const string URL = @"https://dillion132.github.io/login.html";
private const string IE_DRIVER_PATH = @"D:\Downloads\webdriver\IEDriverServer_x64_3.14.0"; // where the Selenium IE webdriver EXE is.
static void Main(string[] args)
{
InternetExplorerOptions opts = new InternetExplorerOptions() { InitialBrowserUrl = URL, IntroduceInstabilityByIgnoringProtectedModeSettings = true, IgnoreZoomLevel=true };
//create a webdriver to open parent window. after doing something, close the window.
using (var driver = new InternetExplorerDriver(IE_DRIVER_PATH, opts))
{
driver.Navigate();
Thread.Sleep(3000);
var txtname = driver.FindElementById("txtname");
txtname.SendKeys("BBB");
var txtpass = driver.FindElementById("txtpassword");
txtpass.SendKeys("123");
var submit = driver.FindElementById("Submit1");
submit.Click();
driver.Quit();
}
InternetExplorerOptions opts2 = new InternetExplorerOptions() { InitialBrowserUrl = "https://www.bing.com", IntroduceInstabilityByIgnoringProtectedModeSettings = true, IgnoreZoomLevel = true };
//create another window.
using (var driver = new InternetExplorerDriver(IE_DRIVER_PATH, opts2))
{
driver.Navigate();
Thread.Sleep(3000);
}
Console.ReadKey();
}
推荐阅读
- google-cloud-platform - 使用服务帐户进行 Google Admin SDK 身份验证
- reactjs - 使用 axios 将 2 个不同的 api 连接到一个反应应用程序
- javascript - 仅使用单词从数组中删除项目
- docker - 如果挂载的文件已更改,如何强制 Ansible 重新创建 docker 容器
- javascript - 在 vuejs 中迭代数组数组
- java - 当我使用 ddl-auto=create 时,JPA/hibernate 没有生成其中一个表
- python - pandas.read_sql_query() 抛出 TypeError: 'NoneType' object is not iterable
- php - 在 php7.2 中绑定 PDO 变量不起作用
- google-sheets - 在一个选项卡中识别字符串,在另一个选项卡中使用字符串数据传播字符串
- sql-server - Azure 分析服务 - 增量刷新