我目前正在使用selenium + Cucumber + Internet Explorer自动化基于IBM Cognos平台的应用程序,并且正面临一些挑战。我需要这个小组就这些问题提供一些专家帮助。
问题描述 - 单击页面上的链接后,将打开新的浏览器。理想情况下,getWindowHandles()方法返回WebDriver打开的正确浏览器数。我们使用窗口句柄属性切换到第二个浏览器,将在第二个浏览器上执行进一步的操作。无论WebDriver打开的浏览器数量如何,GetWindowHandles都返回值1。我尝试了以下方法 -
使用环境 - Selenium WebDriver - 2.39.0 IEDriverServer.exe - Win32_2.39.0 Windows 7的 Internet Explorer 8.0
注意 - 它在Firefox上工作正常,此问题仅在IE上发生。
答案 0 :(得分:0)
我遇到了同样的问题,但添加以下功能解决了我的问题。
ie.forceCreateProcessApi
需要将以上功能添加到InternetExplorer中。 希望它也可以解决你的问题。 您可能还需要修改reg编辑器才能使其正常工作。
答案 1 :(得分:0)
访问父窗口时,应提供一些延迟。 这是我的错误,原因是未运行哪个脚本。您可以尝试以下代码。
driver.findElement(By.xpath("//a[text()='Multi-PopUp Test']")).click();
String parent=driver.getWindowHandle();
Thread.sleep(3000);
System.out.println("parent window: "+parent);
Set<String>allwindow=driver.getWindowHandles();
int count=allwindow.size();
System.out.println("Total windows: "+count);
for(String child:allwindow)
{
if(!parent.equalsIgnoreCase(child))
{
driver.switchTo().window(child);
System.out.println("Child window title is:"+driver.getTitle());
Thread.sleep(3000);
driver.close();
}
}
答案 2 :(得分:-2)
您能否判断点击该链接是打开新标签页还是新窗口?
新窗口中的链接打开与新选项卡中的链接打开之间存在差异。
案例1:
如果有多个窗口,则driver.getWindowHandles()返回句柄列表,因此列表的大小为&gt; 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