Добрый день!
Возможно кто-нибудь сталкивался с подобным, тесты загрузки файлов работают локально, но не работают на удаленном агенте(TeamCity)
Суть проблемы:
При попытке загрузить файлы с удаленной машины - тесты падают с ошибкой(Robot) или не загружают файлы(AutoIT)
Что я делаю:
1 вариант
При помощи Селенида кликаю на кнопку, для отображения окна загрузки файла
При помощи Robot(java) указываю путь к файлу
2 вариант
При помощи Селенида кликаю на кнопку, для отображения окна загрузки файла
Про помощи autoIT запускаю exe который делает окно загрузки активным и вбивает путь к файлу
Оба варианта работают локально, но не работают на удалённой машине
Код
AutoIT
WinActivate("Open")
WinWaitActive("Open")
Send("Test.txt")
Send("{ENTER}")
Java:
Путь тестовый, на удаленной машине он другой
Runtime.getRuntime().exec("C:\\Users\\User\\Desktop\\autoIT_Upload.exe");
----------------------------------------------------------------------------------------------------------------
Вариант с Robot:
public static void uploadFileWindowHandler(String s){
try {
Robot robot = new Robot();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isUpperCase(c)) {
robot.keyPress(KeyEvent.VK_SHIFT);
}
robot.keyPress(Character.toUpperCase(c));
robot.keyRelease(Character.toUpperCase(c));
if (Character.isUpperCase(c)) {
robot.keyRelease(KeyEvent.VK_SHIFT);
}
}
robot.keyPress(KeyEvent.VK_ENTER); // confirm by pressing Enter in the end
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(5000);
} catch (AWTException e) {
e.printStackTrace();
}
Локально оба варианта работают, при выполнении удалённо:
1.Главное чтоб пользователь под которым вы запускаете тесты был “User”, пользователи не видят папки друг-друга. В общем должен быть доступ.
“я подключен к машине, на которой они выполняются - тесты не падают”
2. похоже что у вас нет рабочего стола. Т.е. ну не может браузер или другое приложение открыться без рабочего стола. Чтоб работало вы должны всегда быть залогированы, настройте автологин и под этим пользователем запускайте тесты
Ну я не знаю по поводу других тестов. но разница в том что
Селениум работает внутри браузера и он не знает ни о чем связанное с другими окнами(формами).
А роботом вы пытаетесь работать с оконом?
" При помощи Robot(java) указываю путь к файлу" а у вас например окно блокировки в этот момент.
А кликает или посылает нажатия он по координатам, окно которое где то там… под экраном блокировки. Фактически работая с окном блокировки.
Ну это как пример… Точно я сказать конечно не могу.
вот правильный подход
Как решил проблему в итоге, мб кому-либо будет полезно:
Покопав js понял, что поле с input добавляется после нажатия на кнопку “Загрузить” с “display:none”. После - загрузил файл так как указывал @asolntsev
То есть работало так: нажимаем на кнопку “Загрузить” --> Отображается win окно и добавляется input --> после этого его можно получить и делать с ним, что душе угодно
Проще всего было бы отловить выполняя в консоли: document.querySelectorAll(‘input[type=file]’) до и после нажатия на “Загрузить”(менялось бы кол-во элементов), ну или поковыряв js