【问题标题】:How to get the browser handle for a new opened IE window using Selenium Java如何使用 Selenium Java 获取新打开的 IE 窗口的浏览器句柄
【发布时间】:2020-03-04 09:27:04
【问题描述】:

我正在使用 Selenium java 进行自动化测试。对于我的场景,首先打开登录页面,然后提供凭据并单击登录按钮,当前浏览器(带有登录页面)关闭,并打开一个带有主页的新 IE 窗口。在java代码中,我正在获取带有登录页面url的驱动程序,并从那里提供用户名和密码,然后单击登录页面工作正常,但之后页面关闭并在我尝试在主页上工作时打开新的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>");
...

谢谢,

苏洛迪普

【问题讨论】:

  • 如果打开了新的 IE 窗口你为什么要driver.get("&lt;Home Page URL&gt;");
  • 其实我想获取新打开的窗口/页面的控件/句柄,所以我试图通过 driver.get("");但那时我遇到了错误。所以这个陈述是错误的,需要做其他事情,但无法得到什么。

标签: java selenium selenium-webdriver


【解决方案1】:

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

String lastWindowHandle = new TreeSet<>(driver.getWindowHandles()).last()
driver.SwitchTo().Window(lastWindowHandle);

【讨论】:

  • 谢谢Sumit...会试试的
【解决方案2】:

在调用获取主页句柄的操作时,您需要检查从登录页面到主页的导航是否在时间内完成。您可能需要使用 Wait 来延迟通话。

【讨论】:

    【解决方案3】:

    一个更简单的解决方案可能是这样的:

    driver.SwitchTo().Window(driver.WindowHandles.Last());
    

    .Last() 只会切换到最近打开的窗口,这应该是您单击链接时刚刚打开的窗口。

    【讨论】:

    • 将检查您的解决方案 Viki...谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 2016-02-04
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多