Selenium Webdriver зависает при использовании Java-класса Robot

Я работаю над автоматическим тестом, который должен открыть документ в Internet Explorer. Сценарий прекрасно работает до тех пор, пока не нажмете ссылку на документ, которая запускает надоедливое всплывающее окно IE, как показано ниже

Поскольку я не могу сосредоточиться на окне с помощью Webdriver, я попытался использовать Robot.java для отправки ключей "Alt+O", который прекрасно работает вручную, но во время выполнения блокируется во время выполнения. Я предполагаю, что есть некоторая несовместимость с Selenium/Robot.java, но я нахожусь в тупике, поскольку я не могу генерировать какие-либо журналы из-за тупика. Пожалуйста, не предлагайте использовать AutoIT, так как мои аналитики по безопасности не позволят мне использовать его по какой-то глупой причине. Буду признателен за любую оказанную помощь.

Инструментальное:

  1. Селен-сервер автономный-2.41.0
  2. IEDriverServer (32-разрядная версия)
  3. Версия Internet Explorer = 9
  4. Скрипт написан на Java

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 ответа

Я столкнулся с той же проблемой в Firefox . Попробуйте использовать темы. Запустите два потока, первый для открытия всплывающей кнопки. Теперь вещи замерзают. Теперь поместите некоторое ожидание во второй поток и выполните отправку ключей.

Надеюсь, это работает.

Попробуйте отпустить клавишу через полсекунды после нажатия клавиши. ошибка может быть связана с очень небольшой задержкой между нажатием и отпусканием клавиши.

// 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);
    }
Другие вопросы по тегам