【问题标题】:Robot framework close browser popup window机器人框架关闭浏览器弹出窗口
【发布时间】:2017-11-01 09:33:27
【问题描述】:

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

窗口以html页面的形式打开,代码为:href=fileName.html

但是,Robot 框架 Selenium2Library 关键字都不会关闭弹出窗口,例如 Close Window,根据文档,它说“关闭当前打开的弹出窗口”。但是,此命令会关闭 main 浏览器窗口,而不是弹出的那个。

我还尝试使用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 关闭了主浏览器窗口,而不是弹出的那个。

根据 Robot 文档,Get Window Titles 这样做:

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

【问题讨论】:

  • href=fileName.html 本身不会导致打开新窗口。你能显示窗口的确切定义吗?当您尝试close window 时,您是否等待片刻让窗口有机会出现?你确定窗口正在出现吗?如果Get window titlesget window identifiers 只返回主窗口,则该弹出窗口似乎没有出现。
  • @BryanOakley 请在我的 OP 中查看编辑

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


【解决方案1】:

如果一切都失败了,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);

【讨论】:

  • 但是我如何真正选择要关闭的窗口呢?这就是问题所在。
猜你喜欢
  • 2017-08-22
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多