Не разворачивается приложение при работе с Winium

Добрый день.
Не могу понять в чем проблема, описываю.
Возьмем простой случай, нам нужно открыть программу нажать “Да” и закрыть программу:

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 к текущим обьектам.
Не могли бы вы кинуть кусок кода подобной реализации?
Спасибо.

Разобрался, не проснулся просто сразу))
К сожалению sleep не решил данную проблему, также приложение остается в трее и не желает выходить на передний план.

Область проблемы сузилась, суть кейса.
Если приложение открыто на первом степе и после этого запускаем драйвер winium то все ок. Дальше оно проходит итерацию полностью, открывает приложение, проходит по степам и закрывает.
Но, если открыть драйвер с закрытым изначально приложением, то скрипт застряет на шаге открытия приложения, сижу ломаю голову, что это может быть.

Надо проверить desiredCapabiltites, а именно:

  • app, где должен быть указан полный путь до приложения (тут стоит проверить, что все \ корректно экранированы, если этого требует язык)
  • debugConnectToRunningApp должен быть установлен в false (No, False, в зависимости от языка).

Подробнее тут Capabilities · 2gis/Winium.Desktop Wiki · GitHub

Если все указано верно, а драйвер все равно пропускает запуск приложения, то стоит прикрепить к посту логи сессии из драйвера. Логи можно или скопировать из консоли приложения, или записать в файлы с помощью опций --verbose --log-path={FILE}.

Попробую сюда призвать основного разработчика Winium.Desktop, возможно он сможет что-то подсказать.

1 лайк

Замотался не отписался, все ок, проблему решил.
Я просто отдельно прописал запуск программы через .bat, поигрался с задержками и все ок:)
Спасибо за наводку.

Если не трудно, то перепроверьте desiredCapabilitites, может это все же баг. А тогда хотелось бы его локализовать и исправить.

Более того, если приложение запускается из тестов, то вы можете легко регулировать в каких тестах вам нужно “чистое” приложение, а в каких можно работать в одной сессии. А если запускать приложение через .bat, то приложение запустится один раз перед всеми тестами и все тесты будут работать с одним и тем же процессом, накапливая историю в приложении и потенциально влияя друг на друга.

Ситуация специфична, приложение запускается, но остается в трее. При дальнейших запусках все ок. Проблема как раз в первом вызове приложения по прямой ссылке.
Я просто создал два метода для вызова нужного файла и удаления батника после вызова. Это даже плюс, так как делает запуск более гибким.

Народ, если вы здесь разобрались с такой сложной проблемой, как решить обратную проблему, зацепить программу которая уже бежит…, где-то пару лет назад я это делал с виниумом, но код канул в лету ибо у нас появился ранорекс, а сейчас у нас чисто селениум, но кое где мелькает виндоус апп, нужо тупо на него кликнуть и тот код я уже найти не могу, вспомнить тоже не получается

Заранее благодарен