Selenium   workshop by Ronald Kaiser
Overview (ou uma tentativa) Motivação Características Componentes O Selenês Sintaxe Localizando elementos Command set Selenium IDE Ferramentas auxiliares Gotcha's e dicas Stop! - Selenium IDE hands on Selenium RC Stop! - Selenium RC hands on Selenium na intelie ....
Motivação (aviso)
Motivação Dedo do estagiário que  realizava testes 'na mão'
Motivação Automatizar testes !
Características
Características Open source (Apache 2.0 license) Suporte a maioria dos browsers: (Firefox 2/3, Safari 1/2/3, Opera 8/9, Google Chrome, um tal de IE 7/8, outro (RC)) Muito simples:  curva de aprendizado suave API (Selenium RC) para diversas linguagens:  HTML, Java, C#, Perl, PHP,  Python and Ruby
Componentes
Componentes IDE RC Grid
O Selenês Conjunto de comandos que o  Selenium ”entende”.
Sintaxe Very simple! Command  Target  Value
Localizando elementos
Localizando elementos Command  Target  Value locatorType =location
Localizando elementos Locator types: Identifier DOM XPATH
Localizando elementos - Identifier Retorna o primeiro elemento com o dado id/name HTML: <form id=&quot;loginForm&quot;> Selenium target: identifier=loginForm
Localizando elementos - DOM Javascript document way HTML: <form id=&quot;loginForm&quot;> Selenium target: dom=document.getElementById('loginForm')
Localizando elementos - XPath XPath foi criado especificamente para navegar entre os elementos e atributos de um documento XML. HTML: <form id=&quot;loginForm&quot;> Selenium target: xpath=//form[@id='loginForm']
Command set
Command set Actions Accessors Assertions
Command set - Actions Alteram o estado da aplicação open check clickAndWait focus keyPress type close  ....
Command set - Accessors Examinam o estado da aplicação e armazenam seus resultados em variáveis storeElementHeight storeElementPositionLeft storeEval storeValue ....
Command set - Assertions Verificam se o estado da aplicação está de acordo com o esperado assertAllLinks assertConfirmation assertTextPresent assertTitle ....
Selenium IDE
Ferramentas Auxiliares Plugins p/ firefox: Firebug XPath Checker
Stop!  Selenium IDE hands on
Gotcha's e dicas
Gotcha's e dicas Não dependa da estrutura Não defina locators como esse:  xpath=//body/div/div/a[contains(text(), 'bug tracker')] Dependente da estrutura do DOM Difícil manutenção!
Gotcha's e dicas Tempo de carregamento: aplicações  AJAX Actions do tipo /(.*)andWait/ não funcionam com AJAX Use /waitFor(.*)/ Ex.:  waitForElementPresent waitForVisible
Selenium RC
Stop!  Selenium RC hands on
Selenium na
Quem usa Ext?
Adobe Aetna AIG Alcatel-Lucent Amazon.com Best Buy Boeing Borland CA Canon Capgemini Cisco CNN Dow Jones & Co. EMC Fidelity General Electric Hallmark HP HSBC IBM Mott MacDonald NATO NetApp Nortel Northrop Grumman Panasonic Pixar Animation Studios Qualcomm, Inc. S&P SAP Siemens Sony Symantec Visa International more
Problema And /^I have added a &quot;([^\&quot;]*)&quot; property with a &quot;([^\&quot;]*)&quot; type$/ do |name, type| @browser.wait_for_element_present &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-grid3-row-first')]//tr//*[contains(text(), 'Nome')]&quot; @browser.click_at &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-grid3-row-first')]//tr//*[contains(text(), 'Nome')]&quot;, &quot;0,0&quot; @browser.wait_for_element_present &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input&quot; @browser.wait_for_editable &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input&quot; @browser.type &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input[parent::div[not(contains(@style, 'hidden'))]]&quot;, &quot;#{name}&quot; @browser.wait_for_element_present &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input[parent::div[not(contains(@style, 'hidden'))]]&quot; @browser.click_at &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-grid3-row-first')]//tr//td[4]&quot;, &quot;0,0&quot; @browser.wait_for_element_present &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input[contains(@class, 'x-form-focus')]&quot; @browser.click_at &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input[contains(@class, 'x-form-focus')]&quot;, &quot;0,0&quot; @browser.wait_for_element_present &quot;//div[contains(@class, 'x-combo-list-item') and contains(text(),'#{type}')]&quot; @browser.click_at &quot;//div[contains(@class, 'x-combo-list-item') and contains(text(),'#{type}')]&quot;, &quot;0,0&quot;
nosso ”problema” + popularidade do Ext = selenium-extjs
selenium-extjs Framework para testar aplicações Ext com Selenium
selenium-extjs gem install selenium-extjs git://github.com/cathoderay/selenium-extjs.git
Obrigado!

Selenium Workshop

  • 1.
    Selenium workshop by Ronald Kaiser
  • 2.
    Overview (ou umatentativa) Motivação Características Componentes O Selenês Sintaxe Localizando elementos Command set Selenium IDE Ferramentas auxiliares Gotcha's e dicas Stop! - Selenium IDE hands on Selenium RC Stop! - Selenium RC hands on Selenium na intelie ....
  • 3.
  • 4.
    Motivação Dedo doestagiário que realizava testes 'na mão'
  • 5.
  • 6.
  • 7.
    Características Open source(Apache 2.0 license) Suporte a maioria dos browsers: (Firefox 2/3, Safari 1/2/3, Opera 8/9, Google Chrome, um tal de IE 7/8, outro (RC)) Muito simples: curva de aprendizado suave API (Selenium RC) para diversas linguagens: HTML, Java, C#, Perl, PHP, Python and Ruby
  • 8.
  • 9.
  • 10.
    O Selenês Conjuntode comandos que o Selenium ”entende”.
  • 11.
    Sintaxe Very simple!Command Target Value
  • 12.
  • 13.
    Localizando elementos Command Target Value locatorType =location
  • 14.
    Localizando elementos Locatortypes: Identifier DOM XPATH
  • 15.
    Localizando elementos -Identifier Retorna o primeiro elemento com o dado id/name HTML: <form id=&quot;loginForm&quot;> Selenium target: identifier=loginForm
  • 16.
    Localizando elementos -DOM Javascript document way HTML: <form id=&quot;loginForm&quot;> Selenium target: dom=document.getElementById('loginForm')
  • 17.
    Localizando elementos -XPath XPath foi criado especificamente para navegar entre os elementos e atributos de um documento XML. HTML: <form id=&quot;loginForm&quot;> Selenium target: xpath=//form[@id='loginForm']
  • 18.
  • 19.
    Command set ActionsAccessors Assertions
  • 20.
    Command set -Actions Alteram o estado da aplicação open check clickAndWait focus keyPress type close ....
  • 21.
    Command set -Accessors Examinam o estado da aplicação e armazenam seus resultados em variáveis storeElementHeight storeElementPositionLeft storeEval storeValue ....
  • 22.
    Command set -Assertions Verificam se o estado da aplicação está de acordo com o esperado assertAllLinks assertConfirmation assertTextPresent assertTitle ....
  • 23.
  • 24.
    Ferramentas Auxiliares Pluginsp/ firefox: Firebug XPath Checker
  • 25.
    Stop! SeleniumIDE hands on
  • 26.
  • 27.
    Gotcha's e dicasNão dependa da estrutura Não defina locators como esse: xpath=//body/div/div/a[contains(text(), 'bug tracker')] Dependente da estrutura do DOM Difícil manutenção!
  • 28.
    Gotcha's e dicasTempo de carregamento: aplicações AJAX Actions do tipo /(.*)andWait/ não funcionam com AJAX Use /waitFor(.*)/ Ex.: waitForElementPresent waitForVisible
  • 29.
  • 30.
    Stop! SeleniumRC hands on
  • 31.
  • 32.
  • 33.
    Adobe Aetna AIGAlcatel-Lucent Amazon.com Best Buy Boeing Borland CA Canon Capgemini Cisco CNN Dow Jones & Co. EMC Fidelity General Electric Hallmark HP HSBC IBM Mott MacDonald NATO NetApp Nortel Northrop Grumman Panasonic Pixar Animation Studios Qualcomm, Inc. S&P SAP Siemens Sony Symantec Visa International more
  • 34.
    Problema And /^Ihave added a &quot;([^\&quot;]*)&quot; property with a &quot;([^\&quot;]*)&quot; type$/ do |name, type| @browser.wait_for_element_present &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-grid3-row-first')]//tr//*[contains(text(), 'Nome')]&quot; @browser.click_at &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-grid3-row-first')]//tr//*[contains(text(), 'Nome')]&quot;, &quot;0,0&quot; @browser.wait_for_element_present &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input&quot; @browser.wait_for_editable &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input&quot; @browser.type &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input[parent::div[not(contains(@style, 'hidden'))]]&quot;, &quot;#{name}&quot; @browser.wait_for_element_present &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input[parent::div[not(contains(@style, 'hidden'))]]&quot; @browser.click_at &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-grid3-row-first')]//tr//td[4]&quot;, &quot;0,0&quot; @browser.wait_for_element_present &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input[contains(@class, 'x-form-focus')]&quot; @browser.click_at &quot;//div[contains(@class, 'stream-form')]//div[contains(@class, 'x-small-editor')]//input[contains(@class, 'x-form-focus')]&quot;, &quot;0,0&quot; @browser.wait_for_element_present &quot;//div[contains(@class, 'x-combo-list-item') and contains(text(),'#{type}')]&quot; @browser.click_at &quot;//div[contains(@class, 'x-combo-list-item') and contains(text(),'#{type}')]&quot;, &quot;0,0&quot;
  • 35.
    nosso ”problema” +popularidade do Ext = selenium-extjs
  • 36.
    selenium-extjs Framework paratestar aplicações Ext com Selenium
  • 37.
    selenium-extjs gem installselenium-extjs git://github.com/cathoderay/selenium-extjs.git
  • 38.