Работа webdriver с flash. Тестирование текствого редактора

Добрый день!
Существует флешовый текстовый редактор. Необходимо кликнуть в его определенную точку с помощью selenium webdriver. Пытаюсь это осуществить с помощью имитации мышки

new Actions(driver).moveByOffset(691, 654).click().perform();

Судя по тому, что курсор в момент клика меняется со стрелочки на руку, то можно предположить, что клик все же происходит, но ожидаемой реакции нет.
Использую selenium-server-standalone-2.42.2 + Java
За советы буду примного благодарен.

Смежные темы:

  1. Автоматизация тестирования во flash-играх
  2. Доступ к параметрам Flash-player с помощью Selenium webdriver
  3. Автоматизация тестирования flash-игр
  4. Инструменты тестирования flex и flash
  5. Тестирование клика по flash банеру

SikuliX вам в помощь.

П.С. Флеш - почти мертвая технология. Селениум не будет его саппортить.

2 лайка

Не уверен насчет именно вашего редактора, но может поможет переключиться сначала на его frame а потом нажимать его toolbar.

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

Но у меня возникает вопрос:

  1. Если этот элемент делали ваши разработчики, то можно к нему обращаться вызовами через JavaScript, используя в самом флеш элементе механизм ExternalInterface функций.
  2. Если же это сторонний элемент, то проще всего использовать Genie UI Tester от Adobe

Его (Genie) можно подымать когда Вы тестируете только данный елемент.

Была тема по этому поводу:

1 лайк

Всем спасибо. Буду разбираться

Стоит попробовать ещё так, когда обычный click не срабатывает:

new Actions(driver).moveByOffset(691, 654).clickAndHold().release().build().perform();

Извините, но это не прокатит. Так как уже писалось выше, для работы с flash Selenium не пременим в принципе.

Я бы попробовал всё равно, чем опускать руки. :slight_smile:
Т.к. flash грузится во фрейме браузера.

Попробовать конечно можно. И я думаю нужно, вдруг что то в Selenium новое придумали. Но из богатого опыта тестирования flash приложений, скажу одно, вернее повторюсь. Flash полностью закрыто от внешнего воздействия! Это факт. Стучаться в flash наитивными методами браузера, это сродни постучаться в бункер костяшками пальцев.
Так что пробуйте.
И просьба. Отпишитесь о результатах.
Это я vpavlov1000.

В зависимости от браузера и desired capabilities подобные клики проходят на уровне нативных методов ОС.

ну я бы не сказал, что селениум не применим в принципе. Я как-то помню делал тесты на страничку, где был флеш плеер. И взаимодействовал с ним. Насколько я помню(а было это года 2-3 назад), там были следующие возможности:
1)действительно click через actions (как писал @anym0us). Только сдвиги по пикселям не есть хорошо.
2)помнится можно было взаимодействовать с объектом flash через javascript и дергать его торчащие наружу методы(я так кстати делал)
3)совсем в тупую - если флэш объект простой и надо лишь что то на нем нажать - можно посылать ему через sendKeys клавишные (Tab, enter и тд) значения и навигировать внутри него через них.

Вообщем было бы желание, а метод найдется.

Вы ещё раз подтвердили, что методами Selenium мы не можем полностью контролировать flash элемент.
Исходя из темы, например, мы не сможем ввести что - нибуть в редактор. А тем более проверить правильность ввода. Если конечно программисты, разрабатывающие компонент, не предусмотрели каких-нибудь методов для общения ч/з JavaScript.

А вы сами пробовали провернуть такой финт?
Буду премного благодарен за пример, если таковой имееться.

Да, полностью контролировать - не получится.
Но если требуется простое взаимодействие с флеш объектом - это возможно.
А если требуется тестирования именно флеш-редактора - то тут надо искать другой способ.

		DesiredCapabilities dc = new DesiredCapabilities();
		dc.setCapability("requireWindowFocus",true);
		WebDriver driver = new InternetExplorerDriver(dc);		
		driver.get("http://www.webwasp.co.uk/flash-sample-movies/05-popup/index.php");
		System.out.println(driver.getTitle());		
		final Set<String> handles = driver.getWindowHandles();
		(new Actions(driver)).moveByOffset(30,385).click().perform();
		String newWindowHandle = new WebDriverWait(driver,10).until(new ExpectedCondition<String>(){
			@Override
			public String apply(WebDriver arg0) {				
				Set<String> newHandles =  arg0.getWindowHandles();
				newHandles.removeAll(handles);
				return newHandles.isEmpty()?null:newHandles.iterator().next();
			}

		});
		driver.switchTo().window(newWindowHandle);
		System.out.println(driver.getTitle());
		driver.quit();

Output

Started InternetExplorerDriver server (32-bit)
2.35.3.0
Listening on port 5486
Flash Tutorial: - webwasp.co.uk
Pop Up Window

А вот комбо - тайп и клик

		WebDriver driver = new InternetExplorerDriver();		
		driver.get("http://www.webwasp.co.uk/flash-sample-movies/04-password/index.php");		
		Actions a = new Actions(driver);
		a.moveByOffset(180,380).doubleClick().perform();		
		a.sendKeys("go").perform();		
		a.moveByOffset(90,0).click().perform();		
		Thread.sleep(2000);
		System.out.println(driver.findElement(By.xpath("//body")).getText());
		driver.quit();

Output

Started InternetExplorerDriver server (32-bit)
2.35.3.0
Listening on port 47532
 GO!
No content yet, but when it comes... your tongue will drool.
back