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

wfauudbj  于 2023-01-30  发布在  其他
关注(0)|答案(3)|浏览(175)

我目前正在使用Selenium + Cucumber + Internet Explorer自动化一个基于IBM Cognos平台的应用程序,并面临一些挑战。我需要这个小组的Maven帮助解决这些问题。
问题描述-单击页面上的链接时,将打开新浏览器。理想情况下,getWindowHandles()方法返回WebDriver打开的浏览器的正确计数。我们使用窗口句柄属性切换到第二个浏览器,将在第二个浏览器上执行进一步操作。GetWindowHandles返回值1,与WebDriver打开的浏览器数量无关。我尝试过以下方法-
1.单击()链接并尝试getWindowHandles()
1.键。在链接上输入& getWindowHandles()
1.链接上的发送键(“\0”)和getWindowHandles()
1.将鼠标悬停在链接上,单击链接并获取窗口句柄
1.双击链接并获取窗口句柄
1.使用发送键(keys.control +“t”)打开新选项卡,导航到URL和getWindowHandles()
1.使用发送键(keys.control +“n”)打开新的浏览器窗口,导航到URL和getWindowHandles()
使用的环境- selenium 网络驱动程序- 2.39.0 IEDriverServer. exe-Win32_2.39.0 Windows 7 Internet Explorer 8.0
注意-它在Firefox上运行良好,这个问题只发生在IE上。

tv6aics1

tv6aics11#

我也面临着同样的问题,但添加以下功能解决了我的问题.

ie.forceCreateProcessApi

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

vhipe2zx

vhipe2zx2#

当你访问父窗口,那么你应该提供一些延迟。这是我的错误,由于脚本没有运行。你可以试试这个代码。

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();
    }
}
5anewei6

5anewei63#

你能分辨出点击链接是打开一个新标签页还是一个新窗口吗?在新窗口中打开的链接和在新标签页中打开的链接是有区别的。

    • 案例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

相关问题