Selenium - getWindowHandles()返回值1,与浏览器打开的数量无关

问题描述 投票:0回答:2

我目前正在使用selenium + Cucumber + Internet Explorer自动化基于IBM Cognos平台的应用程序,并且正面临一些挑战。我需要这个小组就这些问题提供一些专家帮助。

问题描述 - 单击页面上的链接后,将打开新的浏览器。理想情况下,getWindowHandles()方法返回WebDriver打开的正确浏览器数。我们使用窗口句柄属性切换到第二个浏览器,将在第二个浏览器上执行进一步的操作。无论WebDriver打开的浏览器数量如何,GetWindowHandles都返回值1。我试过以下方法 -

  1. 单击链接上的()并尝试getWindowHandles()
  2. Keys.Enter on the link&getWindowHandles()
  3. 链接上的sendkeys(“\ 0”)&getWindowHandles()
  4. 鼠标悬停在链接上,单击链接&getWindowHandles
  5. 双击链接&getWindowHandles
  6. 使用sendkeys(keys.control +“t”)打开新选项卡,导航到URL和getWindowHandles()
  7. 使用sendkeys(keys.control +“n”)打开新的浏览器窗口,导航到URL和getWindowHandles()

使用的环境 - Selenium WebDriver - 2.39.0 IEDriverServer.exe - Win32_2.39.0 Windows 7 Internet Explorer 8.0

注意 - 它在Firefox上工作正常,此问题仅在IE上发生。

selenium selenium-webdriver
2个回答
0
投票

我遇到了同样的问题,但添加以下功能解决了我的问题。

ie.forceCreateProcessApi 

以上功能需要添加到InternetExplorer中。希望它也可以解决你的问题。您可能还需要修改reg编辑器才能使其正常工作。


-2
投票

你能说出点击链接是打开新标签页还是新窗口?新窗口中的链接打开与新选项卡中的链接打开之间存在差异。 情况1: 如果有多个窗口,driver.getWindowHandles()返回句柄列表,因此列表的大小> 1.下面的代码演示了窗口之间的切换:

//Get the current window handle
String windowHandle = driver.getWindowHandle();

//Get the list of window handles
ArrayList tabs = new ArrayList (driver.getWindowHandles());
System.out.println(tabs.size());
//Use the list of window handles to switch between windows
driver.switchTo().window(tabs.get(0));

//Switch back to original window
driver.switchTo().window(mainWindowHandle);

案例2: 如果同一窗口中有多个选项卡,则只有一个窗口句柄。因此,在窗口句柄之间切换可将控件保持在同一选项卡中。 在这种情况下使用Ctrl + \ t(Ctrl + Tab)在标签之间切换,对我有用。

//Open a new tab using Ctrl + t
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
//Switch between tabs using Ctrl + \t
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");

可以在此处找到在同一浏览器窗口中的选项卡之间切换的详细示例代码: http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

© www.soinside.com 2019 - 2024. All rights reserved.