使用Java的Robot类时,Selenium Webdriver会冻结

时间:2014-07-08 15:26:59

标签: java selenium webdriver awtrobot

我正在进行需要在Internet Explorer中打开文档的自动化测试。该脚本完全正常,直到单击文档的链接,这将启动如下所示的讨厌的IE弹出窗口

enter image description here

由于我无法使用Webdriver专注于窗口,我尝试使用Robot.java发送键“Alt + O”,这可以手动正常工作,但在执行时会在运行时死锁。我的假设是与Selenium / Robot.java存在一些不兼容性,但由于死锁导致我无法生成任何日志,因此我难以接受。请不要建议使用AutoIT,因为我的安全分析师不会因为某些愚蠢的原因而让我使用它。非常感谢任何帮助。

工具:

  1. selenium-server-standalone-2.41.0
  2. IEDriverServer(32位版本)
  3. Internet Explorer版本= 9
  4. 脚本是用Java编写的
  5. MyRobot.java

    public class MyRobot {
    
    private static Robot robot;
    
    public static void sendVirtualKeyCombination(int... keyEvents) {
    
        try {
    
            robot = new Robot();
            robot.setAutoDelay(1000);
    
            // Press key combination
            for (int keyEvent : keyEvents) {
                System.out.println("Pressing " + KeyEvent.getKeyText(keyEvent));
                robot.keyPress(keyEvent);
            }
    
        } catch (AWTException e) {
            e.printStackTrace();
        } finally {
    
            // Release all keys
            for (int keyEvent : keyEvents) {
                System.out.println("Releasing " + KeyEvent.getKeyText(keyEvent));
                robot.keyRelease(keyEvent);
            }
        }
    
    }
    }
    

    MyRobot调用

    MyRobot.sendVirtualKeyCombination(KeyEvent.VK_Alt, KeyEvent.VK_O);
    

2 个答案:

答案 0 :(得分:0)

按键后半秒钟尝试松开琴键。错误可能是由于按下和释放按键之间的延迟非常小。

// Press key combination
for (int keyEvent : keyEvents) {
    System.out.println("Pressing " + KeyEvent.getKeyText(keyEvent));
    robot.keyPress(keyEvent);
    }

    thread.sleep(500)

for (int keyEvent : keyEvents) {
    System.out.println("Releasing " + KeyEvent.getKeyText(keyEvent));
    robot.keyRelease(keyEvent);
    }

答案 1 :(得分:0)

我在Firefox中遇到了同样的问题。尝试使用线程。 启动两个线程,第一个用于打开弹出按钮。事情冻结了。 现在,在第二个线程中放置一些等待并执行发送密钥。

希望这有效。