Selenium Webdriver зависает при использовании Java-класса Robot
Я работаю над автоматическим тестом, который должен открыть документ в Internet Explorer. Сценарий прекрасно работает до тех пор, пока не нажмете ссылку на документ, которая запускает надоедливое всплывающее окно IE, как показано ниже
Поскольку я не могу сосредоточиться на окне с помощью Webdriver, я попытался использовать Robot.java для отправки ключей "Alt+O", который прекрасно работает вручную, но во время выполнения блокируется во время выполнения. Я предполагаю, что есть некоторая несовместимость с Selenium/Robot.java, но я нахожусь в тупике, поскольку я не могу генерировать какие-либо журналы из-за тупика. Пожалуйста, не предлагайте использовать AutoIT, так как мои аналитики по безопасности не позволят мне использовать его по какой-то глупой причине. Буду признателен за любую оказанную помощь.
Инструментальное:
- Селен-сервер автономный-2.41.0
- IEDriverServer (32-разрядная версия)
- Версия Internet Explorer = 9
- Скрипт написан на 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);
}