Wyzwania w automatyzacji Selenium WebDriver

Podobne dokumenty
Automatyzacja testów aplikacji webowych w Selenium podstawy. Natalia Krawczyk

Michał Sierzputowski. Zautomatyzuj swoje testy automatyczne oparte o Selenium

Automatyzacja Testowania w WEB 2.0

Tester oprogramowania 2014/15 Tematy prac dyplomowych

Zwinna współpraca programistów i testerów z wykorzystaniem BDD i. by Example (JBehave/Spock/SpecFlow)

WebAii Automation Framework

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Całościowe podejście do testowania automatycznego dla programistów. /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Automatyzacja narzędziami open source nie musi być trudna

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Słowa kluczowe jak góry lodowe

REFERAT PRACY DYPLOMOWEJ

Wstęp do testowania : Szymon Ramczykowski

elektroniczna Platforma Usług Administracji Publicznej

Front-end: solidne podstawy. Wszystko, co warto wiedzieć o HTML, CSS, JavaScript i Bootstrap.

Szczegółowy opis zamówienia:

Dokumentacja użytkownika

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Zagrożenia związane z udostępnianiem aplikacji w sieci Internet

Testy aplikacji webowych

Spring Framework - wprowadzenie i zagadnienia zaawansowane

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

n+1 sposobów na automatyczne testy aplikacji mobilnych WrotQA, webinar Łukasz Siudakiewicz Damian Szczurek Automation Test Engineer

Politechnika Wrocławska

Acceptance Test Driven Development wspierane przez narzędzie ROBOT Framework. Edyta Tomalik Grzegorz Ziemiecki

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Testowanie aplikacji mobilnych z ukierunkowaniem na system Android

Program szkolenia: Receptury testowania automatycznego - problemy, strategie, taktyki, techniki, narzędzia

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Udostępnianie obrazu z kamer Sanyo HD na stronach WWW PORADNIK

SSI Web 8. (badania.kozminski.edu.pl) Instrukcja logowania i uruchamiania ankiety

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Wyświetlanie publikacji w formacie DjVu. Wyświetlanie publikacji w Bałtyckiej Bibliotece Cyfrowej można realizować na 3 sposoby:

elektroniczna Platforma Usług Administracji Publicznej

Programowanie i projektowanie obiektowe

Techniki efektywnego testowania kodu dla programistów Java (Spock


Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Zastosowanie darmowych rozwiązań do testów użyteczności aplikacji internetowych

Zajęcia 4 - Wprowadzenie do Javascript


Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/4.1.4/2015

Kancelaria Prawna.WEB - POMOC

Instrukcja aktywacji i instalacji Certum Code Signing

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Exulto Software House

Instrukcja konfiguracji popularnych przeglądarek internetowych systemu Windows do pracy z urządzeniami INTERNEC serii i7 oraz i5.

Wielojęzykowość w aplikacjach J2EE. Tomasz.Skutnik@e-point.pl

BACKUP BAZ DANYCH FIREBIRD

Krótki kurs JavaScript

Ciągłe dostarczanie oprogramowania : kompletny przewodnik / Eberhard Wolff. Gliwice, cop Spis treści

LeftHand Sp. z o. o.

Szkolenie wycofane z oferty. Programowanie w JavaScript (zawiera jquery)

Programowanie poprzez testy z wykorzystaniem JUnit

Języki skryptowe w programie Plans

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015

Architektura komunikacji

Instrukcja laboratoryjna

Narzędzia podnoszące jakość procesu wytwarzania i wdrażania

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

GUI - projektowanie interfejsów cz. II

Archiwizacja baz MSSQL /BKP_SQL/ opis oprogramowania

Nexto.API. Przykładowy klient Java 1.6 do systemu zamówień NextoAPI. Przygotował Rafał Ozga e-kiosk S.A. Maj 2015,

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Testowanie aplikacji Java Servlets

I. Opis przedmiotu zamówienia

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/4.1.4/2016

Rejestratory i sieciowe kamery

Zarządzanie kontami użytkowników w i uprawnieniami

Efektywne tworzenie aplikacji webowych z wykorzystaniem AngularJS, HTML5 i JavaScript

Pracownia internetowa w szkole ZASTOSOWANIA

Laboratorium - Użycie narzędzia Przywracanie systemu w Windows Vista

Webowy generator wykresów wykorzystujący program gnuplot

Automatyczne testowanie aplikacji Android

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015

Aplikacje WWW - lab 11

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Jak okiełznać frontend w Django? Piotr Maliński

Uwaga WAŻNE!!!!! Do prawidłowego działania systemu na komputerze użytkowników potrzebna jest obecność maszyny wirtualnej java (JRE).

Funkcje i instrukcje języka JavaScript

Dokument hipertekstowy

Instrukcja procesu aktywacji oraz obsługi systemu Banku Internetowego dla BS Mikołajki

Forte Zarządzanie Produkcją Instalacja i konfiguracja. Wersja B

Projektowanie obiektowe oprogramowania Testowanie oprogramowania Wykład 13 Wiktor Zychla 2014

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

CouchDB. Michał Nowikowski

Projekt architektury systemów informatycznych Uniwersytetu Warszawskiego w oparciu o metodykę TOGAF. Tomasz Turski

DOKUMENTACJA IMPLEMENTACJI MECHANIZMÓW OBSŁUGI AHMES SMS (soap)

Behavior Driven Development (BDD)

Programowanie warstwy klienta w aplikacji JavaEE

REFERAT PRACY DYPLMOWEJ. Temat pracy: Projekt i realizacja warstwy serwerowej gry internetowej

Sexy unit testy. czyli o kilku praktykach w testach jednostkowych

Makeitright Power Farm RPA

Transkrypt:

Wyzwania w automatyzacji Selenium WebDriver Tomasz Fajks Tomasz Bień Automatyzacja testów Objectivity

AGENDA Problemy Różnica w implementacji automatyzacji pomiędzy projektami Duży próg wejścia w prawidłową automatyzację Utrzymanie dużej ilości testów jest czasochłonne Długość wykonywania testów Przenoszalność i stabilność testów a dane testowe Selenium i jego słabości

RÓŻNICE MIĘDZY PROJEKTAMI NUnit, MsTest, xunit czy SpecFlow Page Object Pattern używać czy nie? Spójność nazw Struktura projektu testów Te same problemy duplikujące się rozwiązania Różne podejście do lokatorów elementów

RÓŻNICE MIĘDZY PROJEKTAMI https://github.com/objectivitybss/test.automation Page Object Pattern Różne frameworki testowe Różne przeglądarki Rozszerzony FindElement Verify ElementLocator Nuget.org Objectivity.Test.Automation.Common.NUnit Objectivity.Test.Automation.Common.Features Objectivity.Test.Automation.Common.MsTest

DYMANICZNE LOKATORY ZA POMOCĄ ELEMENT LOCATOR Zamiast: private By firstelement = By.CssSelector("div[ng-repeat*='field']:nth-of-type(1) i"); private By secondelement = By.CssSelector("div[ng-repeat*='field']:nth-of-type(2) i"); Dynamiczny lokator: private ElementLocator _dragelement = new ElementLocator (Locator.CssSelector, "div[ng-repeat*='field']:nth-of-type({0}) i"); Wywołanie lokator a Driver.GetElement(_dragElement.Format("1"));

DUŻY PRÓG WEJŚCIA W PISANIE TESTÓW Firmowy framework do testów!!! Szkolenia i warsztaty Kółka zaintesesowań (Test Automation Group) Wsparcie ekspertów

UTRZYMANIE TESTÓW JEST CZASOCHŁONNE

DŁUGOŚĆ WYKONYWANIA TESTÓW Rozwiązanie Przeniesienie części testów niżej Pokrycie testami UI procesów Unity > Integracja > UI UI Integracja Unity

STRONA LOGOWANIA FACEBOOK

PRZYKŁADOWE TESTY User Story Unity (Backend) Unity (Frontend) Integracja UI Strona Logowania Logowanie z minimalną długością znaków Logowanie bez hasła... Walidacja wpisanego hasła Walidacja komunikatów Udane logowanie Nieudane logowanie Udane logowanie US002 TestCase A TestCase B TestCase C TestCase D TestCase E TestCase F TestCase G TestCase B TestCase H TestCase I TestCase A

ZARZĄDZANIE TIMEOUTAMI Zakaz używania Thread.Sleep(); Elementy lokalizowane za pomocą Explicit Waits Odpowiednie zdefiniowane metod i timeout ów

ZARZĄDZANIE TIMEOUTAMI Zamiast var iselementdisplayed = GetElement(element).Displayed; Użyj this.driver.iselementpresent(element, CustomTimeout1); this.driver.iselementpresent(locator, CustomTimeout2);

RÓWNOLEGŁOŚĆ TESTÓW Wykorzystanie mechanizmów puszczania równoległych testów we framework ach testowych xunit Nunit MsTest Specflow 2 Projektowanie grup testów aby testy nie były zależne od siebie

DANE TESTOWE Przenoszalność testów i ich utrzymywanie Backup om mówimy nie! Baza ze skryptów + słowniki Dodawanie i czyszczenie per test lub grupę testów SQL API Selenium w scenariuszach CRUD

PROBLEMY Z NARZĘDZIEM - WEBDRIVER Problemy z narzędziem Webdriver Kontrolki Kendo Wykresy SVG Okna systemowe (logowanie NTLM, ściąganie plików itd) Specflow

http://demos.telerik.com/kendo-ui KONTROLKI KENDO

KONTROLKI KENDO JAVA SCRIPT CSS selektor Konsola przeglądarki ExecuteScript() //Zwrócenie elementów $('#GridId').data('kendoGrid')._data; //Rozwinięcie drzewka elementów $('#TreeViewId').data('kendoTreeView').expand('.k-item'); //Wybranie wartości 'jakistekst' z listy $('#SelectId').data('kendoComboBox').select(function(dataItem) {{return dataitem.text === 'jakistekst';}}) //Ile jest wartości dla serii 0 na wykresie $('#ChartId').data('kendoChart').options.series[0].data.length"

http://blogs.msdn.com/b/powerbi/archive/2014/12/18/ WYKRESY SVG

WYKRESY SVG JAVA SCRIPT Scalable Vector Graphics Konsola przeglądarki Selenium nie zawsze sobie radzi CSS selektor Przykład //Zwracamy co wyświetla tooltip po najechaniu na wykres @"var el = $('.slice'). data.data.tooltipinfo, values = ''; Object.keys(el).forEach(key => values += el[key]['value']+';'); return values; //A zwraca dokładnie tak wyglądające 2 wartości po średniku 27;43143;

WYKRESY SVG TOOLTIP Odczytaj dane z tooltipa, który się pojawia po najechaniu kursorem var driver = new FirefoxDriver(); driver.navigate().gotourl("http://demos.telerik.com/kendoui/bar-charts/index"); // Zlokalizuj element, który posiada tooltip po najechaniu var bar = driver.findelement(by.cssselector("g[clip-path] path")); // Przesun kursor do tego elementu new Actions(driver).MoveToElement(bar).Build().Perform(); // Zlokalizuj element tooltip i odczytaj z niego wartości. var tooltip = driver.findelement(by.cssselector(".k-charttooltip"))); Console.WriteLine(tooltip.Text.Trim());

WYKRESY SVG VISUAL TESTING driver = eyes.open(driver, "Applitools", "Test Web Page"); driver.navigate().gotourl("http://www.applitools.com"); // Visual validation point #1 eyes.checkwindow("main Page"); driver.findelement(by.cssselector(".features>a")).click(); // Visual validation point #2 eyes.checkwindow("features Page"); // End visual testing. Validate visual correctness. eyes.close();

OKNA SYSTEMOWE WINDOWS Selenium tego nie widzi Okno uwierzytelnienia, okno wysyłania plików, okno ściagania plików, etc.

UWIERZYTELNIENIE I ŚCIĄGANIE PLIKÓW PROFILE FIREFOXA Logowanie i ściąganie plików przy wykorzystaniu profili Firefox http://domain%5cuser:pass@server // Ustawienia uwierzytelnienia profile.setpreference("network.automatic-ntlm-auth.trusted-uris", "objectivity.co.uk"]); profile.setpreference("signon.autologin.proxy", true); profile.setpreference("network.automatic-ntlm-auth.allow-non-fqdn", true); profile.setpreference("network.ntlm.send-lm-response", "true"); profile.setpreference("network.negotiate-auth.allow-non-fqdn", true); // Ustawienia do ściągania pliku profile.setpreference("browser.download.dir", "C:\\Download"); profile.setpreference("browser.download.folderlist", 2); profile.setpreference("browser.download.managershowwhenstarting", false); profile.setpreference("browser.helperapps.neverask.savetodisk", "application/pdf");

UWIERZYTELNIENIE - AUTOIT Logowanie przy użyciu AutoItX for.net https://www.nuget.org/packages/autoitx/ Uruchamianie równoległe? AutoItX.WinWait(windowName, "", 5); if (AutoItX.WinExists(windowName) == 1) { AutoItX.Send(ConfigurationManager.AppSettings["User"]); AutoItX.Send("{TAB}"); AutoItX.Send(ConfigurationManager.AppSettings["Passwd"]); AutoItX.Send("{Enter}"); Thread.Sleep(500); }

UWIERZYTELNIENIE - SYSTEM.WINDOWS.AUTOMATION Logowanie przy użyciu ATUFramework oraz System.Windows.Automation Uruchamianie równoległe? var handler = new WindowsHandler(); AutomationElement wnd = handler.findwindowbyname("webdriver - Internet Explorer"); AutomationElement okbutton = handler.getelementbyname(wnd, "OK"); AutomationElement username = handler.getelementbyname(wnd, "User"); AutomationElement password = handler.getelementbyname(wnd, "Pswd"); handler.sendtextusinguiautomation(username, Conf.Username); handler.sendtextusinguiautomation(password, Conf.Password); handler.clickat(okbutton); http://automationtestingutilities.blogspot.com/p/handling-windows-authentication.html https://msdn.microsoft.com/en-us/library/ms747327%28v=vs.110%29.aspx

UPLOAD - SYSTEM.WINDOWS.FORMS Upload pliku przy użyciu System.Windows.Forms; Uruchamianie równoległe? public void UploadAttachment(String filename) { Wait.WaitForHalfSec(); SendKeys.SendWait(fileName); Wait.WaitForHalfSec(); SendKeys.SendWait("{TAB}"); Wait.WaitForHalfSec(); SendKeys.SendWait("{TAB}"); } Wait.WaitForHalfSec(); SendKeys.SendWait("{ENTER}");

UWIERZYTELNIENIE - PLUGINY FIREFOX Logowanie przy użyciu pluginów Firefox i JavaScript Wtyczki autoauth-2.1-fx+fn.xpi test_automation_password_manager-0.1.1-fx.xpi // Ustawienia do dodania pluginów Firefox profile.addextension("autoauth-2.1-fx+fn.xpi"); profile.addextension("test_automation_password_manager-0.1.1- fx.xpi"); // Java Script ustawiający hasło i użytkownika w Password Manager "var addcredentialsevent = " + "new CustomEvent('add_credentials_to_passman', {detail: {" + "host: 'http://objectivity', " + "username: 'user', password: 'password'" + "}});window.dispatchevent(addcredentialsevent);"); https://github.com/natritmeyer/test_automation_firefox_password_manager/

SPECFLOW Behavoiur-driven development (BDD) DSL Gherkin - GIVEN, WHEN, THEN Paczki Nuget SpecFlow 1.9.0 (już jest v2 pre-preview) Problemy Link Dodatkowa warstwa Auto-generowane testy Brak wsparcia resharpera Uruchamianie rownoległe (już można) Brak kontroli nad krokami testów (rózne nazewnictwo dla tych samych akcji) http://www.specflow.org/getting-started/

SPECFLOW RULES Nie mieszaj kolejności słów kluczowych Używaj właściwego czasu Nie używaj can Parametr nigdy na początku lub końcu kroku Pojedyncze apostrofy dla słów Brak apostrofów dla liczb Given I'm logged into I'm logged into the system When I make sure I'm logged into the system Then I can should see value 123 on 'pie' chart

DOBRE PRAKTYKI Korzystaj z pomocy doświadczonych kolegów Używaj CI Page Object Pattern Framework Czytelne lokatory Nie hardkoduj lokatorów Taguj testy, np. Smoke

A jak u was wygląda piramida? UI Integracja Unity

Pytania? Dziękujemy