我有一个用户尝试登录应用程序(简单网页)的实例。成功登录后,应用程序关闭当前页面并打开一个新网页。其余的业务运营从那里开始。
直到 API 点击登录按钮,一切正常。登录后(一旦登录网页关闭并打开新会话),API 会抛出“无法找到浏览器”。这是真的,因为原始驱动程序实例已被应用程序关闭。
有没有办法使用 selenium 来实现这些场景,因为它们现在很常见——在典型的业务应用程序中。
谢谢。
我有一个用户尝试登录应用程序(简单网页)的实例。成功登录后,应用程序关闭当前页面并打开一个新网页。其余的业务运营从那里开始。
直到 API 点击登录按钮,一切正常。登录后(一旦登录网页关闭并打开新会话),API 会抛出“无法找到浏览器”。这是真的,因为原始驱动程序实例已被应用程序关闭。
有没有办法使用 selenium 来实现这些场景,因为它们现在很常见——在典型的业务应用程序中。
谢谢。
如果您需要驱动不同的浏览器窗口或 iframe,则需要使用switchto
. 从WebDriver 常见问题解答:
问:如何处理弹出窗口?
A: WebDriver 提供了处理多个窗口的能力。这是通过使用“WebDriver.switchTo().window()”方法切换到具有已知名称的窗口来完成的。如果名称未知,您可以使用“WebDriver.getWindowHandles()”获取已知窗口的列表。您可以将句柄传递给“switchTo().window()”。
感谢你的回答。我做了以下事情来实现我的查询。
执行 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("Your website");
登录后,应用程序将关闭新窗口,但主驱动程序窗口仍然存在。
为新窗口实现一个简单的 SwitchTo() 以开始新的业务操作
List<string> handles = driver.WindowHandles.ToList<string>();
driver.SwitchTo().Window(handles.Last());