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

Тестирование клика по flash банеру


(kokos_test) #1

Не могу кликнуть по флеш банеру.
Использую Microsoft Visual Studio 2010 + Nunit + Selenium WebDriver + Firefox
Тестирую страницу на которой есть несколько банеров (все флешки). Необходимо прокликать эти банеры, проверить что они корректно переходят на нужные страницы.
Проблема cтоит в том, что Selenium не видит ссылки во флешке куда перейти. 
При клике мы реально идем по тому что во flashvars
Пример реального кода

<div style="border: 1px solid green;">

<embed width="240" height="400" flashvars="clickTARGET=_blank&amp;clickTAG=http%3A%2F%2Fadserver.adserver.local%2Ftrunk%2Fwww%2Fdelivery%2Fck.php%3Foaparams%3D2__bannerid%3D11300__zoneid%3D6899__OXLCA%3D1__cb%3D20ccb46ad5__oadest%3Dhttp%253A%252F%252Flocalhost%252F&amp;bannerId=11300&amp;zoneId=6899&amp;cb=20ccb46ad5" allowscriptaccess="always" wmode="opaque" quality="high" name="Advertisement" id="Advertisement" style="width: 240px; height: 400px;" src="http://adserver.adserver.local//trunk/www/tests/test_banners/02-flash.swf" type="application/x-shockwave-flash">

</embed>

</div>

Кликнуть как по обычной ссылке не получается (что-то типо того driver.FindElement(By.XPath(".//*[@id='Advertisement']")).Click();) Никаких действий не происходит.

Помогите пожалуйста, приведите пример на C# как можно протестировать клик по флешке 

 


Работа webdriver с flash. Тестирование текствого редактора
(Alexander Petrovich) #2

А ваш баннер часом не в отдельном фрэйме живёт? 


(Mykhailo Poliarush) #3

webdriver не работает с флешом, вам надо использовать сторонние инструменты для того чтобы нажать на ссылку

тут даже javascript несправиться потому, что не умеет генерировать правильные события на внешний флеш

так что тут или надо инджектить соотвествующий код в флеш, пример http://www.echoecho.com/flashjavascript.htm

или использовать сторонние инструменты


(kokos_test) #4

Спасибо за ответ!

А не подскажешь, какой инструмент можно использовать в таком случае?


(Mykhailo Poliarush) #5

сходу я бы назвал AutoIT или Sikuli, но у вас C# потому надо посмотреть, какие инструменты можно использовать для вашего языка программирования

 


(kokos_test) #6

 

Вот что заметил. 
При использовании ChromeDriver (в IE похожая ситуация, правда не всегда все баннеры открываются) баннеры вполне нормально прокликиваются, и страница нужная открывается и в базу данных статистика о клике пишется. А вот при использовании FirefoxDriver вроде бы тест проходит без ошибок, фокус наводится на баннер, а вот клика не происходит. То есть в хроме вполне реально работать с flash. 
А вот что я хотел конкретно узнать. Почему chromedriver и firefox по разному ведут себя с флешкой??? 

(Mykhailo Poliarush) #7

скорее всего это из-за, как каждый браузер генерирует events

попробуйте вклчюить и выключить native events

http://code.google.com/p/selenium/wiki/AdvancedUserInteractions#Native_events_versus_synthetic_events

 

Browser Operating system Native events Synthetic events
Firefox Linux supported supported (default)
Firefox Windows supported (default) supported
Internet Explorer Windows supported (default) not supported
Chrome Linux/Windows supported* not supported
Opera Linux/Windows supported (default) not supported
HtmlUnit Linux/Windows supported (default) not supported

 

FirefoxProfile profile = new FirefoxProfile();
profile.setEnableNativeEvents(true);
FirefoxDriver driver = new FirefoxDriver(profile);

(kokos_test) #8

Вот с такой конструкцией не работает. Firefox фокусируется на баннер но кликнуть не может.

FirefoxProfile profile = new FirefoxProfile();                          
profile.setEnableNativeEvents(false);  
driver = new FirefoxDriver(profile);
 
При включенном, setEnableNativeEvents(true), тоже.
А chrome и IE продолжают успешно кликать по баннерам.

(Mykhailo Poliarush) #9

а покажите, как вы производите клик на необходимом вам элементе?

попробуйте еще выполнить клик через класс Actions


(kokos_test) #10

Вот так я я кликаю на необходимый элемен. 

driver.switchTo().frame("1"); //захожу в нужный ifame                                                 

driver.findElement(By.xpath(""/html/body/div/span/span/embed"")).click(); //по xpath выражению нахочу куда кликнуть               

ClosureAndVerification();  //тут я закрываю вновь открывшееся окно и выхожу из ifame, там же делаю проверку на корректность открытого окна
 
У меня нет опыта в автоматическом тестированиею Я не знаю как делать клик через класс Actions. Могли бы вы показать на моем примере, как это делать? Или киньте пожалуйста ссылку на хорошую инфу по этому вопросу))

 


(Mykhailo Poliarush) #11

 

Actions builder = new Actions(driver);
   builder.moveToElement(myElement)
       .click(myElement)
Action mouseoverAndClick = builder.build();
mouseoverAndClick.perform();

ну и ссылки по теме 

http://automated-testing.info/forum/rabota-s-sobytiyami-v-selenium

http://automated-testing.info/forum/kak-v-selenium-webdriver-zapisat-komandu-clickat-na-java

http://automated-testing.info/forum/mouseover-c-webdriver

в общем, можете поискать по форуму слово Actions


(kokos_test) #12

Все заработало. Большое Спасибо за ценный совет!!!

 

 Actions builder = new Actions(driver);
WebElement myElement2 = driver.findElement(By.xpath("/html/body/div/span/a"));
        builder.moveToElement(myElement2).click(myElement2);
    org.openqa.selenium.interactions.Action mouseoverAndClick2 = builder.build();
    mouseoverAndClick2.perform();
 
Вот еще что интересно. Можно ли как-то очищать  myElement и mouseoverAndClick? Что бы использовать в дальнейшем. А то перед каждым нужныйм элементом, куда нужно кликнуть, их очень много, приходится создавать новый вебэлемент

 


(Mykhailo Poliarush) #13

ну вот и отлично

на счет очисщения, вам нужно ощищать текстовое поле?