ݺߣ

ݺߣShare a Scribd company logo
Automated testing – Selenium #2

             Peter Šimún
             @petersimun
Zadefinujte si pravidlá!

nedovoľte, aby sa porušovali

  a váš život bude skvelý




         jedine, že by nie
Pravidlo č.1: Shaolinských mníchov

               Všetko neotestujete, aj
              keď sa na hlavu postavíte
Pozor! Nasleduje kód!
Pravidlo č.2: Striktná a dôkladná architektúra


                               Express your tests in the
                                       language
                               of the end-user of the app



                                 Ubiquitous Language


                                 Domain driven design
Prihlásiť sa do synapsa
Pridať prázdnu stránku
Pridať twitter komponent - @webelement
Pridať twitter komponent - @petersimun
Vycentrovať twitter komponenty na stred stránky
Presunúť druhý twitter komponent (@petersimun) pred prvý twitter komponent
(@webelement)
Overiť výsledok na stránke – správne poradie twitter komponentov, pozícia na
stránke


                     Express your tests in the
                              language
                     of the end-user of the app
loginSupport.login(new UsernamePasswordUser(Role.ADMIN));
pageSupport.addBlankPage(new
Page().randomize(seleniumSupport));
Twitter twitter_ps = new Twitter("petersimun");
Twitter twitter_we = new Twitter("webelement");
toolbarSupport.clickAndWait(Module.COMPONENT);
twitterSupport.createTwitter (twitter_we);
twitterSupport.centerTwitter(twitter_we);
twitterSupport.createTwitter (twitter_ps);
twitterSupport.centerTwitter(twitter_ps);
twitterSupport.moveTwitterToPosition(twitter_we, new
Position(0, 100));
public class Twitter implements WebElement {

    private String twitterAccount = "synapso";
    private int twittsCounts = 5;
    public Twitter (String twitterAccount) {
        this.twitterAccount = twitterAccount;
    }
    public String getTwitterAccount() {
        return twitterAccount;
    }
    public WebElement getTwitterElement() {
        return twitterElement;
    }



 obyčajné POJO
 predstavuje vstupné podmienky testu
 mapuje sa a zobrazuje na UI
public class TwitterPage {
    public By getTwitterSelector() {
        return By.xpath("//div[contains(@class,'twitterWidget') and
                          contains(@class,'floatClear')]//ul");
    }
    public By getTweetSelector(String source) {
        return By.xpath("//div[contains(@class,'twitterWidget
               floatClear') and contains(@source,'" + source
                          + "')]//ul//li[position() = 1]");
    }
    public By getTwitterInputSelector() {
        return By.xpath("//div[contains(@class,'acris-metal-
               dialog')]//input[contains(@class,'gwt-Text')]");
    }
}

reprezentuje UI komponenty pomocou selectorov
ak sa niečo zmení na UI, zmenu treba pravdepodobne reflektovať na tomto
mieste
Ak nechcete skončiť v pekle, nepoužívajte selectory v testoch alebo v support
triedach!!
public class UsernamePasswordLoginSupport implements LoginSupport
{
    @Override
    public void login(UserData userData, Language language) {
    }
        @Override
    public void login(UserData user) {
    }
    @Override
    public void logout() {
    }
    ...
}
Písaný v jazyku zrozumiteľnom pre ľudí ( developer ≠ človek )
Úzko komunikuje so selenium a zaobaluje znovupoužiteľnú funkcionalitu do
metód
Nerobte pikoniny a nestestujte až keď horí
@petersimun



         Seges s.r.o.
Lombardíniho 20, 831 03 Bratislava
   tel. +421 (0)2 206 333 69
        office@seges.sk
         www.seges.sk

More Related Content

Selenium prezentácia pre Webelement

  • 1. Automated testing – Selenium #2 Peter Šimún @petersimun
  • 2. Zadefinujte si pravidlá! nedovoľte, aby sa porušovali a váš život bude skvelý jedine, že by nie
  • 3. Pravidlo č.1: Shaolinských mníchov Všetko neotestujete, aj keď sa na hlavu postavíte
  • 5. Pravidlo č.2: Striktná a dôkladná architektúra Express your tests in the language of the end-user of the app Ubiquitous Language Domain driven design
  • 6. Prihlásiť sa do synapsa Pridať prázdnu stránku Pridať twitter komponent - @webelement Pridať twitter komponent - @petersimun Vycentrovať twitter komponenty na stred stránky Presunúť druhý twitter komponent (@petersimun) pred prvý twitter komponent (@webelement) Overiť výsledok na stránke – správne poradie twitter komponentov, pozícia na stránke Express your tests in the language of the end-user of the app
  • 7. loginSupport.login(new UsernamePasswordUser(Role.ADMIN)); pageSupport.addBlankPage(new Page().randomize(seleniumSupport)); Twitter twitter_ps = new Twitter("petersimun"); Twitter twitter_we = new Twitter("webelement"); toolbarSupport.clickAndWait(Module.COMPONENT); twitterSupport.createTwitter (twitter_we); twitterSupport.centerTwitter(twitter_we); twitterSupport.createTwitter (twitter_ps); twitterSupport.centerTwitter(twitter_ps); twitterSupport.moveTwitterToPosition(twitter_we, new Position(0, 100));
  • 8. public class Twitter implements WebElement { private String twitterAccount = "synapso"; private int twittsCounts = 5; public Twitter (String twitterAccount) { this.twitterAccount = twitterAccount; } public String getTwitterAccount() { return twitterAccount; } public WebElement getTwitterElement() { return twitterElement; } obyčajné POJO predstavuje vstupné podmienky testu mapuje sa a zobrazuje na UI
  • 9. public class TwitterPage { public By getTwitterSelector() { return By.xpath("//div[contains(@class,'twitterWidget') and contains(@class,'floatClear')]//ul"); } public By getTweetSelector(String source) { return By.xpath("//div[contains(@class,'twitterWidget floatClear') and contains(@source,'" + source + "')]//ul//li[position() = 1]"); } public By getTwitterInputSelector() { return By.xpath("//div[contains(@class,'acris-metal- dialog')]//input[contains(@class,'gwt-Text')]"); } } reprezentuje UI komponenty pomocou selectorov ak sa niečo zmení na UI, zmenu treba pravdepodobne reflektovať na tomto mieste Ak nechcete skončiť v pekle, nepoužívajte selectory v testoch alebo v support triedach!!
  • 10. public class UsernamePasswordLoginSupport implements LoginSupport { @Override public void login(UserData userData, Language language) { } @Override public void login(UserData user) { } @Override public void logout() { } ... } Písaný v jazyku zrozumiteľnom pre ľudí ( developer ≠ človek ) Úzko komunikuje so selenium a zaobaluje znovupoužiteľnú funkcionalitu do metód
  • 11. Nerobte pikoniny a nestestujte až keď horí
  • 12. @petersimun Seges s.r.o. Lombardíniho 20, 831 03 Bratislava tel. +421 (0)2 206 333 69 office@seges.sk www.seges.sk