使用Selenium Webdriver将控件切换到模式窗口(非警报)

使用Selenium Webdriver将控件切换到模式窗口(非警报),selenium,modal-dialog,selenium-webdriver,Selenium,Modal Dialog,Selenium Webdriver,我有一个web应用程序,当我单击Save按钮时,它会启动Save窗口(这是模态)。此窗口需要正常运行10秒才能完全加载(我可以等待以应对此情况)。 在完成保存之前,我需要在此窗口中执行一些操作 我面临的问题是 -启动模式窗口时,我无法使用driver.SwitchTo()或driver.Manage().GetAllWindowHandles()等。我用以下代码行确认了这一点 driver.findElement(By.xpath("//*[@id='toolbar']/a[1]")).clic

我有一个web应用程序,当我单击Save按钮时,它会启动Save窗口(这是模态)。此窗口需要正常运行10秒才能完全加载(我可以等待以应对此情况)。 在完成保存之前,我需要在此窗口中执行一些操作

我面临的问题是 -启动模式窗口时,我无法使用driver.SwitchTo()或driver.Manage().GetAllWindowHandles()等。我用以下代码行确认了这一点

driver.findElement(By.xpath("//*[@id='toolbar']/a[1]")).click();
// After the above line is executed, the Popup gets launched

Set<String> sWindowHandles = driver.getWindowHandles();
System.out.println("Popup"); 
System.out.println(driver.getWindowHandles().size()); // This always prints "1"
不起作用,因为模式窗口打开后(只有在启动之后才有意义获取WindowHandles),后续的行根本不会执行。
我陷入了僵局。请帮助我。

如果Windows句柄在应用程序上不起作用。
可以使用Java机器人类函数

      Robot robot = new Robot();   
//Doing a mouse over for the X and Y coordinates of button/link which opens modal window
robot.mouseMove(210,350);  
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);  
robot.delay(100);  
//Clicking tab til the cursor is on specific position (textbox/button)
robot.keyPress(KeyEvent.VK_TAB);  
robot.delay(100);  
//Doing a mouse over for the X and Y coordinates of button/link
robot.mouseMove(300,150);  
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);  
robot.delay(100);
有关更多信息,请参阅以下链接。

我有时发现,即使弹出窗口可见,窗口句柄也可能需要一段时间才能更新为正确的值。为了解决这个问题,我使用了一个循环,当windowhandles达到预期大小时,循环就会中断

我不能100%确定如何识别坐标。我相信你是在要求我将鼠标悬停在模态窗口中的按钮上并直接单击,甚至不收集窗口句柄。你可以在右角firebug窗口的布局选项卡中获得大致的X,Y坐标。打开浏览器后,确保最大化浏览器。检查要知道其XY坐标的图元,从“布局”选项卡中获取并测试它。如果光标不在所需的确切位置,可以从光标所在的位置假定并修改坐标。我通常在我的一个项目中这样做,其中窗口句柄不起作用。不幸的是,机器人的建议没有起作用。MouseMove操作与GetWindowHandlers()类似,只要模式窗口处于活动状态,就无法工作。您可能会看到这种错误-网页上的模式对话框通常不是单独的窗口;它们主要作为页面上的div覆盖实现。请共享您页面的HTML以及模式对话框的HTML。如果使用
showModalDialog
启动该对话框,您应该查看。开始自下而上阅读可能的解决方案。
      Robot robot = new Robot();   
//Doing a mouse over for the X and Y coordinates of button/link which opens modal window
robot.mouseMove(210,350);  
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);  
robot.delay(100);  
//Clicking tab til the cursor is on specific position (textbox/button)
robot.keyPress(KeyEvent.VK_TAB);  
robot.delay(100);  
//Doing a mouse over for the X and Y coordinates of button/link
robot.mouseMove(300,150);  
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);  
robot.delay(100);