机器人框架关闭浏览器弹出窗口

时间:2017-05-31 14:12:36

标签: html selenium internet-explorer selenium-webdriver robotframework

我点击了我的应用程序网页上的链接,弹出一个新窗口(我正在使用Internet Explorer 11,不允许使用任何其他浏览器)。

该窗口作为html页面打开,代码为:href=fileName.html

然而,没有任何Robot框架Selenium2Library关键字会关闭弹出窗口,例如Close Window,根据文档说,“关闭当前打开的弹出窗口”。但是,此命令将关闭浏览器窗口,而不是弹出的窗口。

我还尝试使用Get Window命令的变体,例如Get Window TitlesGet Window Identifiers,但它返回主浏览器窗口或没有窗口。

有没有办法关闭弹出的窗口?

由于

修改

以下是该窗口的html链接:

<a title="Birth Proof Code More Information" id="uef-help0" href="birthProofHelp.html" target="_blank" rel="help" data-uefid="uef-li-hlp" data-modal-disable="true">More Info</a>

以下是该窗口的源代码:

!DOCTYPE HTML>
<html>
    <head>
        <title>Birth Proof</title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    </head>
    <body>
        A - ALLEGED<br>
        B - BIRTH/BAPTISMAL CERTIFICATE (BEFORE THE AGE OF 5)  / PREFERRED BIRTH PROOF<br>
        C - DEFINITION OF 'CONVINCING EVIDENCE' MET<br>
        F -  PREVIOUSLY ESTABLISHED BY THE SSA<br>
        Q - ESTABLISHED BASED ON EVIDENCE OTHER THAN THAT COVERED UNDER CODES 'B' AND 'C'<br>
    </body>
</html>

我尝试睡了60秒才能显示窗口,但它仍无法正常工作。

窗口真的出现了。就像我说的那样,Close Window关闭了主浏览器窗口而不是弹出的窗口。

根据机器人文档,Get Window Titles执行此操作:

  

返回当前浏览器实例已知的所有窗口的标题。

1 个答案:

答案 0 :(得分:0)

如果所有其他方法都失败,则java.awt.robot是一个选项。使用Windows快捷方式关闭窗口:ctrl + w。

编辑:添加如何首先关注窗口(我已经使用了一段时间并且它为我工作,我想我最初是从here获得它,从@回答Avinash Jha):

    import com.sun.jna.Native;
    import com.sun.jna.platform.win32.WinDef.HWND;
    import com.sun.jna.win32.W32APIOptions;

    ...

    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 title);
        int SW_SHOW = 1;
    }

    ...

    User32 user32 = User32.instance;
    HWND hWnd = user32.FindWindow("window title");
    user32.ShowWindow(hWnd, User32.SW_SHOW);
    user32.SetForegroundWindow(hWnd);

然后机器人部分应该是这样的:

import java.awt.*;
import static java.awt.event.KeyEvent.*;

...

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_CONTROL);