Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не выделяется форма WPF приложения и не вводится текст через winium

windows
winium
java
webdriver
Теги: #<Tag:0x00007f7b650e4b78> #<Tag:0x00007f7b650e4948> #<Tag:0x00007f7b650e47b8> #<Tag:0x00007f7b650e4678>

(Руслан Лизогуб) #1

Добрый день.
Столкнулся с проблемой работы с формами в winium, при работе через sendKeys не выделяется форма. Насколько я понял обработка форм в winium происходит через element.send_keys(text)
Пробовал делать предварительный клик по области и отрабатывать разные айдишники на области, ничего не изменилось. По обычным клавишам отрабатывает нормально, а вот формы почему то игнорируются.
Просьба поделится идеями решения данной проблемы:)

Вот приблизительный сценарий обработки, затыкается на этапе обращения к EditPhoneTextBox.

public void autorization() throws MalformedURLException,
			InterruptedException {
		FileWorker batFile = new FileWorker();
		String text = "C:" + "\n" + "cd \"C:\\Program Files (x86)\\ \""
				+ "\n"
				+ "\"C:\\Program Files (x86)\\Wpf.exe\" /max";
		String patch = "D:start.bat";
		batFile.setPatchToBatFile(patch);
		batFile.setTextToBatFile(text);
		batFile.CreateBatFile();

		DesiredCapabilities cap = new DesiredCapabilities();
		cap.setCapability("app", "D:\\start.bat");
		cap.setCapability("launchDelay", "2000");

		WebDriver driver = new RemoteWebDriver(
				new URL("http://localhost:9999"), cap);
		Thread.sleep(2000);

		WebElement window = driver.findElement(By.className("Window"));

		window.findElement(By.id("YesButton")).click();// yes
		window.findElement(By.id("ButtonStartRegistration")).click();// yes
		
		window.findElement(By.id("EditPhoneTextBox")).click();
		window.findElement(By.id("EditPhoneTextBox")).sendKeys("0999999999");
		
		driver.close();

		batFile.DeleteBatFile();
	}

(Руслан Лизогуб) #2

Жаль конечно что советов не было, но проблема решена. В двух словах для архива.
Оказалось что при переходе в следующее окно драйвер не захотел работать с прежним обьектом, нужно было просто создать новый обьект и повторить действия.

        WebElement window = driver.findElement(By.className("Window"));

		window.findElement(By.id("YesButton")).click();// yes
		window.findElement(By.id("ButtonStartRegistration")).click();// yes
		
		WebElement window1 = driver.findElement(By.className("Window"));
		
		window1.findElement(By.id("EditPhoneTextBox")).sendKeys("09999999999");

(Дмитрий Жарий) #3

Возможно, потому что инструмент новый. Спасибо за то что делитесь опытом, доказывающим что с Winium можно работать.


#4

Приветствую, здорово, что разобрались. Внесу немного ясности в происходящее - вероятней всего это элемент внутри приложения стал невалидный, переход окна вызывает перерисовку и видимо реализовано приложение так, что элемент тоже пересоздался, а в таком случае его всегда необходимо искать заново :wink:
p.s. пожалуй получить более быстрый ответ возможно если задать его в issue