当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium Java获取新打开的IE窗口的浏览器句柄

韩晋
2023-03-14

我正在使用Selenium Java进行自动化测试。对于我的场景,首先打开登录页面,在提供凭据并单击登录按钮后,当前浏览器(带有登录页面)关闭,并打开一个带有主页的新IE窗口。在java代码中,我用登录页面url获得驱动程序,然后提供用户名和pwd,然后单击登录页面工作正常,但之后,当页面关闭和新的IE窗口打开时,我试图在主页上工作,我得到了noSuchWindowException或Null句柄,如下所示。你能帮我拿到主页的新窗口句柄吗?

我的代码如下所示:

...
System.setProperty("webdriver.ie.driver", pathToDriver);
driver = new InternetExplorerDriver();

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("<Login Page URL>");

driver.findElement(By.id("userName")).sendKeys("Admin");
driver.findElement(By.id("password")).sendKeys("Admin");
driver.findElement(By.className("loginButton")).click();

driver.get("<Home Page URL>");
...

共有1个答案

欧阳楚
2023-03-14

Selenium Driver.getWinDowhandles()将返回Set,并且没有Set的方法来获取最后一个窗口句柄,但是TreeSet有,所以转换并使用它的last()方法来使用。

String lastWindowHandle = new TreeSet<>(driver.getWindowHandles()).last()
driver.SwitchTo().Window(lastWindowHandle);
 类似资料:
  • 问题内容: 我是angular js的新手,我希望在按下按钮后在浏览器的新窗口中打开PDF文档。 我在前端发出GET请求,在后端有一个Java Rest服务,该服务响应GET并生成PDF。我希望在浏览器中打开此PDF。 如果无法以这种方式打开PDF,那么至少要使用AngularJs打开任何PDF,我该怎么做? 这就是后端在其余服务中生成响应的内容。 问题答案: 如果您有这样的事情: 而是这样做:

  • 问题内容: 我遇到的情况是,单击按钮打开带有搜索结果的新浏览器窗口。 有什么方法可以连接并聚焦到新打开的浏览器窗口吗? 并使用它,然后返回到原始(第一个)窗口。 问题答案: 您可以在以下窗口之间切换:

  • 我已经手动为Google.com打开了一个浏览器窗口,还有另一个浏览器窗口是由selenium webdriver为Google.com打开的。 我如何识别哪一个是硒打开的? 这个问题是在一次采访中问我的。我回答说,selenium打开的窗口不会有插件,还有一个是用Driver。关闭,但面试官说还有其他办法也可以识别。

  • 问题内容: 我正在尝试使用selenium for python在浏览器中打开一个新选项卡或一个新窗口。如果打开新的选项卡或新窗口并不重要,仅打开浏览器的第二个实例才很重要。 我已经尝试了几种不同的方法,但都没有成功。 切换到一个不存在的窗口,希望它在找不到该窗口时会打开一个新窗口: 通过打开的窗口进行迭代(尽管目前只有一个) 尝试模拟键盘按键 driver.send_keys(Keys.CONT

  • 问题内容: 我遇到的情况是,单击按钮打开带有搜索结果的新浏览器窗口。 有什么方法可以连接并聚焦到新打开的浏览器窗口吗? 并使用它,然后返回到原始(第一个)窗口。 问题答案: 你可以在以下窗口之间切换:

  • 本文向大家介绍Python获取浏览器窗口句柄过程解析,包括了Python获取浏览器窗口句柄过程解析的使用技巧和注意事项,需要的朋友参考一下 句柄(handle)是C++程序设计中经常提及的一个术语。它并不是一种具体的、固定不变的数据类型或实体,而是代表了程序设计中的一个广义的概念。句柄一般是指获取另一个对象的方法——一个广义的指针,它的具体形式可能是一个整数、一个对象或就是一个真实的指针,而它的目