我正在尝试打开一个弹出身份验证对话框的ftp页面。我正在使用Robot类的Keypress事件输入身份验证详细信息。但是,如果焦点不在弹出窗口上,那么它会在另一个焦点窗口中键入身份验证详细信息。由于这个弹出窗口不是web元素,我不能使用driver.switchTo()。window(),因为我需要传递windowhandle,我没有得到。如果以某种方式我可以点击该驱动程序窗口,我的焦点将转移到身份验证弹出窗口中的用户ID文本框。请建议一种方法来点击驱动程序窗口,我不知道除了窗口标题以外的任何元素。或者其他一些处理窗口弹出窗口的方法。
答案 0 :(得分:0)
您可以在Robot类中使用坐标:
robot.mouseMove(1005,10);
robot.mousePress(InputEvent.BUTTON1_MASK);
然后使用Keypress
当然,您必须指定窗口的坐标。请注意,此方法可能不可靠 - 它取决于屏幕分辨率,因此如果您在最小化的浏览器和全屏测试它,它将失败。
作为替代方案,您可以将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