Добрый день.
Не могу понять в чем проблема, описываю.
Возьмем простой случай, нам нужно открыть программу нажать “Да” и закрыть программу:
public class StepByStep {
public static void main(String[] args) throws MalformedURLException{
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability("app","C:\\Program Files (x86)\\Wpf.exe");
cap.setCapability("launchDelay","10");
WebDriver driver = new RemoteWebDriver(new URL("http://localhost:9999"),cap);
WebElement window = driver.findElement(By.className("Window"));
window.findElement(By.id("NoButton")).click();//no
window.findElement(By.id("CloseButton")).click();//yes
driver.close();
}
}
Проблема в том что приложение запускается но остается в фоне, соответственно виниум не может нажать на нужный обьект.
Если запускать через командную строку приложение выходит на передний план, через ярлык также.
Подскажите плиз в чем может быть загвоздка, как в данной ситуации выводить приложение на передний план?
Эта тема теперь исключена из списков. Она не будет отображаться среди других тем ни на каких страницах, а единственным способом прочитать ее будет доступ по ее прямой ссылке.
Стоит попробовать добавить что-то вроде Thread.sleep(2000); сразу после new RemoteWebDriver и перед первым вызовом click(). Вероятно приложение не успевает выйти на передний план и драйвер производит клик в то окно, которое находится выше вашего приложения (вероятнее всего IDE).
Чтобы не писать sleep в коде теста можно попробовать использовать launchDelay capability, которая получает значение задержки в миллисекундах.
Разобрался, не проснулся просто сразу))
К сожалению sleep не решил данную проблему, также приложение остается в трее и не желает выходить на передний план.
Область проблемы сузилась, суть кейса.
Если приложение открыто на первом степе и после этого запускаем драйвер winium то все ок. Дальше оно проходит итерацию полностью, открывает приложение, проходит по степам и закрывает.
Но, если открыть драйвер с закрытым изначально приложением, то скрипт застряет на шаге открытия приложения, сижу ломаю голову, что это может быть.
Если все указано верно, а драйвер все равно пропускает запуск приложения, то стоит прикрепить к посту логи сессии из драйвера. Логи можно или скопировать из консоли приложения, или записать в файлы с помощью опций --verbose --log-path={FILE}.
Попробую сюда призвать основного разработчика Winium.Desktop, возможно он сможет что-то подсказать.
Замотался не отписался, все ок, проблему решил.
Я просто отдельно прописал запуск программы через .bat, поигрался с задержками и все ок:)
Спасибо за наводку.
Если не трудно, то перепроверьте desiredCapabilitites, может это все же баг. А тогда хотелось бы его локализовать и исправить.
Более того, если приложение запускается из тестов, то вы можете легко регулировать в каких тестах вам нужно “чистое” приложение, а в каких можно работать в одной сессии. А если запускать приложение через .bat, то приложение запустится один раз перед всеми тестами и все тесты будут работать с одним и тем же процессом, накапливая историю в приложении и потенциально влияя друг на друга.
Ситуация специфична, приложение запускается, но остается в трее. При дальнейших запусках все ок. Проблема как раз в первом вызове приложения по прямой ссылке.
Я просто создал два метода для вызова нужного файла и удаления батника после вызова. Это даже плюс, так как делает запуск более гибким.
Народ, если вы здесь разобрались с такой сложной проблемой, как решить обратную проблему, зацепить программу которая уже бежит…, где-то пару лет назад я это делал с виниумом, но код канул в лету ибо у нас появился ранорекс, а сейчас у нас чисто селениум, но кое где мелькает виндоус апп, нужо тупо на него кликнуть и тот код я уже найти не могу, вспомнить тоже не получается