无法专注于弹出窗口

时间:2014-10-21 06:19:40

标签: java selenium selenium-webdriver

我正在尝试打开一个弹出身份验证对话框的ftp页面。我正在使用Robot类的Keypress事件输入身份验证详细信息。但是,如果焦点不在弹出窗口上,那么它会在另一个焦点窗口中键入身份验证详细信息。由于这个弹出窗口不是web元素,我不能使用driver.switchTo()。window(),因为我需要传递windowhandle,我没有得到。如果以某种方式我可以点击该驱动程序窗口,我的焦点将转移到身份验证弹出窗口中的用户ID文本框。请建议一种方法来点击驱动程序窗口,我不知道除了窗口标题以外的任何元素。或者其他一些处理窗口弹出窗口的方法。

1 个答案:

答案 0 :(得分:0)

您可以在Robot类中使用坐标:

robot.mouseMove(1005,10);
robot.mousePress(InputEvent.BUTTON1_MASK);

然后使用Keypress

http://www.developer.com/java/other/article.php/10936_2212401_2/Introduction-to-the-Java-Robot-Class-in-Java.htm

当然,您必须指定窗口的坐标。请注意,此方法可能不可靠 - 它取决于屏幕分辨率,因此如果您在最小化的浏览器和全屏测试它,它将失败。

作为替代方案,您可以将Sikuli绑定与java - http://www.sikuli.org/一起使用 - 并使用sikuli图片比较来与弹出窗口进行交互。不幸的是,它也不像我们想要的那样可靠。

您也可以使用其他java库 - https://github.com/twall/jna我不知道您的操作系统是什么,因此您可能需要更改一些行。

public class selectHiddenWindow {
  public interface User32 extends W32APIOptions {   
     User32 instance = (User32) Native.loadLibrary("user32", User32.class, DEFAULT_OPTIONS);  

     boolean ShowWindow(HWND hWnd, int nCmdShow); 
     boolean SetForegroundWindow(HWND hWnd);  
     HWND FindWindow(String winClass, String title);  
     int SW_SHOW = 1;              
}  

public static void main(String[] args) {  
   User32 user32 = User32.instance;  
   HWND hWnd = user32.FindWindow(null, "your title");  
   user32.ShowWindow(hWnd, User32.SW_SHOW);  
   user32.SetForegroundWindow(hWnd);  
}

来源:http://www.coderanch.com/t/562454/java/java/FindWindow-ShowWindow-SetForegroundWindow-effect-win