SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Webbrowser-Automatisierung mit Python und
           Selenium WebDriver
                 Andi Albrecht

            FrOSCon 2012, Python-Track
               http://froscon.org

               26. August 2012
Andi Albrecht – @andialbrecht


             Erster Python-Kontakt vor ca. 10 Jahren als Studentische
             Hilfskraft bei der DFG
             Aktuell: Anwendungsentwickler f¨r Webapplikationen bei
                                            u
             ProUnix in Bonn
             Entwicklung und Pflege mittlerer und großer Systeme
             OpenSource: Rietveld Code Review Tool, python-sqlparse,
             CrunchyFrog, ...
             Mitglied der Python-User-Group pyCologne




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
¨
Ubersicht

      Selenium & WebDriver

      selenium-Python-Modul

      API

      Web-Applikationen testen

      Tipps & Tricks

      Demo



Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
Selenium & WebDriver



             Selenium – Set an Tools zur Browser-Automatisierung.
             WebDriver
                       ist eine API, um Browser anzusteuern
                       ersetzt Selenium RC (seit Selenium 2.0)
                       WebDriver API ist W3C-Spezifikation (Status: Working Draft)
                       HtmlUnit, Firefox, IE, Chrome, Opera, iPhone, Android, ...
             Homepage: http://seleniumhq.org/
             Aktuelle Version (21. August 2012): 2.25.0 (Python 2.24.0)




Selenium & WebDriver      selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                          Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
selenium-Python-Modul, Installation




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
selenium-Python-Modul, Installation



      pip install selenium




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
selenium-Python-Modul, Installation



      pip install selenium
             Python-Module
             Firefox-Driver
             Treiber f¨r Chrome und andere Browser brauchen noch ein
                      u
             bisschen mehr Setup.




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
selenium-Python-Modul, Erste Schritte



      $ python
      Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
      >>> from selenium import webdriver
      >>> browser = webdriver.Firefox()
      >>> browser.get(’http://google.com’)
      >>> browser.find element by tag name(’title’)
      <selenium.webdriver.remote.webelement.WebElement ...>




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
selenium-Python-Modul, Erste Schritte



      $ python
      Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
      >>> from selenium import webdriver
      >>> browser = webdriver.Firefox()
      >>> browser.get(’http://google.com’)
      >>> browser.find element by tag name(’title’)
      <selenium.webdriver.remote.webelement.WebElement ...>




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
selenium-Python-Modul, Erste Schritte



      $ python
      Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
      >>> from selenium import webdriver
      >>> browser = webdriver.Firefox()
      >>> browser.get(’http://google.com’)
      >>> browser.find element by tag name(’title’)
      <selenium.webdriver.remote.webelement.WebElement ...>




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
selenium-Python-Modul, Erste Schritte



      $ python
      Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
      >>> from selenium import webdriver
      >>> browser = webdriver.Firefox()
      >>> browser.get(’http://google.com’)
      >>> browser.find element by tag name(’title’)
      <selenium.webdriver.remote.webelement.WebElement ...>




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
selenium-Python-Modul, Erste Schritte



      $ python
      Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
      >>> from selenium import webdriver
      >>> browser = webdriver.Firefox()
      >>> browser.get(’http://google.com’)
      >>> browser.find element by tag name(’title’)
      <selenium.webdriver.remote.webelement.WebElement ...>




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
API – Browsersteuerung

      # Browser initialisieren
      from selenium import webdriver
      browser = webdriver.Firefox()

      # URL aufrufen
      browser.get(’http://example.com’)

      # Seite neu laden
      browser.refresh()

      # History
      browser.back()
      browser.forward()

      # Screenshot erstellen
      browser.get_screenshot_as_file(’/tmp/screenshot.png’)

      # Browser schließen
      browser.quit()



Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
API – Elemente finden


      # Seitentitel
      browser.title     # --> ’Example’

      # Elemente finden
      browser.find element by class name(’clsname’)
      browser.find element by css selector(’div.myclass p’)
      browser.find element by id(’myid’)
      browser.find element by link text(’Klick hier’)
      browser.find element by name(’email’)
      browser.find element by partial link text(’hier’)
      browser.find element by tag name(’a’)
      browser.find element by xpath(’//*/body’)
      browser.find elements by *




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
API – Elemente ansprechen
      # Beispiel: Formular ausf¨llen und absenden
                               u
      form = browser.find_element_by_id(’myform’)
      input = form.find_element_by_name(’email’)
      input.clear()
      input.send_keys(’foo@example.com’)
      input.submit() # entspricht Enter im Input-Feld

      # Beispiel: Link klicken
      link = browser.find_element_by_link_text(’Anmelden’)
      link.click()

      # Beispiel: Elemente untersuchen
      elem = browser.find_element_by_class_name(’hidden’)
      elem.is_displayed() # --> False
      browser.find_element_by_link_text(’Show hidden’).click()
      elem.is_displayed() # --> True
      elem.location       # --> {u’x’: 870, u’y’: 50}
      elem.size           # --> {’height’: 29, ’width’: 90}
      elem.tag_name       # --> ’div’
      elem.text           # --> ’text content of div’


Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
API – JavaScript




      browser.execute_script(’alert("Hello World!")’)




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
Web-Applikationen testen
 1    #!/usr/bin/env python
 2
 3    import unittest
 4
 5    from selenium import webdriver
 6
 7
 8    class TestTitle(unittest.TestCase):
 9
10        def setUp(self):
11            # Toggle comments to test with a different browser
12            self.driver = webdriver.Chrome()
13            #self.driver = webdriver.Firefox()
14            #self.driver = wevdriver.Ie()
15
16        def tearDown(self):
17            self.driver.close()
18
19        def test_title_tag(self):
20            self.driver.get(’http://google.com’)
21            title_tag = self.driver.find_element_by_tag_name(’title’)
22            self.assertEqual(title_tag.text, ’Google’)
23
24
25    if __name__ == ’__main__’:
26        unittest.main()




Selenium & WebDriver    selenium-Python-Modul       API      Web-Applikationen testen     Tipps & Tricks     Demo
                         Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
Wait!


             Browser-Kommandos warten nicht (click, submit, JavaScript,
             ...)
             eigene Warteschleifen sind erforderlich (und sinnvoll!)




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
Wait!


              Browser-Kommandos warten nicht (click, submit, JavaScript,
              ...)
              eigene Warteschleifen sind erforderlich (und sinnvoll!)
      from selenium.webdriver.support.wait import WebDriverWait

      [...]

      elem = browser.find element by id(’save’)
      elem.click() # sendet POST, l¨dt die Seite neu
                                     a
      WebDriverWait(browser, 3).until(
          lambda x: x.find element by tag name(’body’))




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
Page-Pattern
      class LoginPage(object):

          def login_as(self, username, password):
              # some magic
              return HomePage(self.browser)

          def login_expect_exception(self, username, password):
              # ....
              return LoginPage(self.browser)

          def get_exception(self):
              # ....
              return "that happened"




Selenium & WebDriver    selenium-Python-Modul       API      Web-Applikationen testen     Tipps & Tricks     Demo
                         Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
Page-Pattern
      class LoginPage(object):

          def login_as(self, username, password):
              # some magic
              return HomePage(self.browser)

          def login_expect_exception(self, username, password):
              # ....
              return LoginPage(self.browser)

          def get_exception(self):
              # ....
              return "that happened"



             The public methods represent the services that the page offers
             Try not to expose the internals of the page
             Generally don’t make assertions
             Methods return other PageObjects
             Need not represent an entire page
             Different results for the same action are modelled as different methods

      Quelle: http://code.google.com/p/selenium/wiki/PageObjects

Selenium & WebDriver    selenium-Python-Modul       API      Web-Applikationen testen     Tipps & Tricks     Demo
                         Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
sst – Selenium Simple Test



             Wrapper um selenium-Modul
             Einfache API, f¨r Testentwickler gedacht¡
                            u
             Parametrisierbare Tests
             Screenshots bei Fehlern
             Headless-Mode out-of-the-box (ben¨tigt xvfb)
                                              o
             Homepage: http://testutils.org/sst/




Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
sst – Selenium Simple Test


 1    from sst.actions import *
 2
 3    go_to(’http://froscon.org’)
 4    assert_title_contains(’FrOSCon’)
 5    click_link(get_element(tag=’a’, text=’Program’))
 6    click_link(get_element(tag=’a’, text=’program of lectures’))
 7    assert_title_contains(’froscon2012: FrOSCon Program’)
 8    click_link(get_element(tag=’a’, text_regex=’Day 2.*26$’))
 9    click_link(get_element(tag=’a’, text=’>’))
10    click_link(get_element(tag=’a’, text_regex=’.*Selenium.*’))
11    click_link(get_element(tag=’a’, text=’Click here’))
12    set_radio_value(’event_feedback_rating_2’)
13    write_textfield(
14        ’event_feedback_comment’,
15        ’Yay! I’ve learned to automate feedback for my next FrOSCon talk!’)
16    take_screenshot(’/home/andi/Arbeitsfl¨che/feedback.png’)
                                           a
17    raw_input(’Done.’)




Selenium & WebDriver    selenium-Python-Modul       API      Web-Applikationen testen     Tipps & Tricks     Demo
                         Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
Demo, Fragen?




                       Quelle: Classmates PC w Programmable Robot, by chang sen, on Flickr

                             http://www.flickr.com/photos/senchang/5000312557/


Selenium & WebDriver   selenium-Python-Modul        API      Web-Applikationen testen        Tipps & Tricks   Demo
                        Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
Danke!

      Links
      Python-Modul
                 http://pypi.python.org/pypi/selenium/
      Selenium-Homepage
                  http://seleniumhq.org/
         pyCologne
                        http://pycologne.de, Treffen jeden 2. Mittwoch
      Kontakt
               E-Mail albrecht.andi@gmail.com
             Twitter @andialbrecht
         Homepage andialbrecht.de


Selenium & WebDriver   selenium-Python-Modul      API      Web-Applikationen testen     Tipps & Tricks     Demo
                       Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012

Weitere ähnliche Inhalte

Ähnlich wie Webbrowser-Automatisierung mit Python und Selenium WebDriver

Wartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareWartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareOliver Libutzki
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft AG
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technicsadesso AG
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreGregor Biswanger
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresMatthias Jauernig
 
Eclipse PHP Tool Integration (IPC Spring 2010)
Eclipse PHP Tool Integration (IPC Spring 2010)Eclipse PHP Tool Integration (IPC Spring 2010)
Eclipse PHP Tool Integration (IPC Spring 2010)Sven Kiera
 
Web Performance Optimization - JAX 2011 Talk
Web Performance Optimization - JAX 2011 TalkWeb Performance Optimization - JAX 2011 Talk
Web Performance Optimization - JAX 2011 TalkFabian Lange
 
Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop November 2015 von der w-jax 2015Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop November 2015 von der w-jax 2015Manfred Steyer
 
Angular 2 Workshop Oktober 2015
Angular 2 Workshop Oktober 2015Angular 2 Workshop Oktober 2015
Angular 2 Workshop Oktober 2015Manfred Steyer
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Patrick Lauke
 
Frontend-Performance mit PHP
Frontend-Performance mit PHPFrontend-Performance mit PHP
Frontend-Performance mit PHPFrank Kleine
 
Frontend-Performance @ IPC
Frontend-Performance @ IPCFrontend-Performance @ IPC
Frontend-Performance @ IPCNico Steiner
 
Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Manfred Steyer
 
PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzeRalf Lütke
 
Rhomobile
RhomobileRhomobile
RhomobileJan Ow
 

Ähnlich wie Webbrowser-Automatisierung mit Python und Selenium WebDriver (20)

Net@night asp.net mvc
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvc
 
Wartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-SoftwareWartbare Oberflächentests mit Open-Source-Software
Wartbare Oberflächentests mit Open-Source-Software
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform Apps
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technics
 
AngularJS
AngularJSAngularJS
AngularJS
 
Ionic 3
Ionic 3Ionic 3
Ionic 3
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
 
Eclipse PHP Tool Integration (IPC Spring 2010)
Eclipse PHP Tool Integration (IPC Spring 2010)Eclipse PHP Tool Integration (IPC Spring 2010)
Eclipse PHP Tool Integration (IPC Spring 2010)
 
Web Performance Optimization - JAX 2011 Talk
Web Performance Optimization - JAX 2011 TalkWeb Performance Optimization - JAX 2011 Talk
Web Performance Optimization - JAX 2011 Talk
 
Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop November 2015 von der w-jax 2015Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop November 2015 von der w-jax 2015
 
Angular 2 Workshop Oktober 2015
Angular 2 Workshop Oktober 2015Angular 2 Workshop Oktober 2015
Angular 2 Workshop Oktober 2015
 
BizSpark goes Cloud
BizSpark goes CloudBizSpark goes Cloud
BizSpark goes Cloud
 
Was ist neu in .NET 4.5?
Was ist neu in .NET 4.5?Was ist neu in .NET 4.5?
Was ist neu in .NET 4.5?
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010
 
Frontend-Performance mit PHP
Frontend-Performance mit PHPFrontend-Performance mit PHP
Frontend-Performance mit PHP
 
Frontend-Performance @ IPC
Frontend-Performance @ IPCFrontend-Performance @ IPC
Frontend-Performance @ IPC
 
Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1
 
PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-Ansätze
 
Rhomobile
RhomobileRhomobile
Rhomobile
 

Webbrowser-Automatisierung mit Python und Selenium WebDriver

  • 1. Webbrowser-Automatisierung mit Python und Selenium WebDriver Andi Albrecht FrOSCon 2012, Python-Track http://froscon.org 26. August 2012
  • 2. Andi Albrecht – @andialbrecht Erster Python-Kontakt vor ca. 10 Jahren als Studentische Hilfskraft bei der DFG Aktuell: Anwendungsentwickler f¨r Webapplikationen bei u ProUnix in Bonn Entwicklung und Pflege mittlerer und großer Systeme OpenSource: Rietveld Code Review Tool, python-sqlparse, CrunchyFrog, ... Mitglied der Python-User-Group pyCologne Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 3. ¨ Ubersicht Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 4. Selenium & WebDriver Selenium – Set an Tools zur Browser-Automatisierung. WebDriver ist eine API, um Browser anzusteuern ersetzt Selenium RC (seit Selenium 2.0) WebDriver API ist W3C-Spezifikation (Status: Working Draft) HtmlUnit, Firefox, IE, Chrome, Opera, iPhone, Android, ... Homepage: http://seleniumhq.org/ Aktuelle Version (21. August 2012): 2.25.0 (Python 2.24.0) Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 5. selenium-Python-Modul, Installation Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 6. selenium-Python-Modul, Installation pip install selenium Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 7. selenium-Python-Modul, Installation pip install selenium Python-Module Firefox-Driver Treiber f¨r Chrome und andere Browser brauchen noch ein u bisschen mehr Setup. Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 8. selenium-Python-Modul, Erste Schritte $ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) >>> from selenium import webdriver >>> browser = webdriver.Firefox() >>> browser.get(’http://google.com’) >>> browser.find element by tag name(’title’) <selenium.webdriver.remote.webelement.WebElement ...> Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 9. selenium-Python-Modul, Erste Schritte $ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) >>> from selenium import webdriver >>> browser = webdriver.Firefox() >>> browser.get(’http://google.com’) >>> browser.find element by tag name(’title’) <selenium.webdriver.remote.webelement.WebElement ...> Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 10. selenium-Python-Modul, Erste Schritte $ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) >>> from selenium import webdriver >>> browser = webdriver.Firefox() >>> browser.get(’http://google.com’) >>> browser.find element by tag name(’title’) <selenium.webdriver.remote.webelement.WebElement ...> Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 11. selenium-Python-Modul, Erste Schritte $ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) >>> from selenium import webdriver >>> browser = webdriver.Firefox() >>> browser.get(’http://google.com’) >>> browser.find element by tag name(’title’) <selenium.webdriver.remote.webelement.WebElement ...> Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 12. selenium-Python-Modul, Erste Schritte $ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) >>> from selenium import webdriver >>> browser = webdriver.Firefox() >>> browser.get(’http://google.com’) >>> browser.find element by tag name(’title’) <selenium.webdriver.remote.webelement.WebElement ...> Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 13. API – Browsersteuerung # Browser initialisieren from selenium import webdriver browser = webdriver.Firefox() # URL aufrufen browser.get(’http://example.com’) # Seite neu laden browser.refresh() # History browser.back() browser.forward() # Screenshot erstellen browser.get_screenshot_as_file(’/tmp/screenshot.png’) # Browser schließen browser.quit() Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 14. API – Elemente finden # Seitentitel browser.title # --> ’Example’ # Elemente finden browser.find element by class name(’clsname’) browser.find element by css selector(’div.myclass p’) browser.find element by id(’myid’) browser.find element by link text(’Klick hier’) browser.find element by name(’email’) browser.find element by partial link text(’hier’) browser.find element by tag name(’a’) browser.find element by xpath(’//*/body’) browser.find elements by * Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 15. API – Elemente ansprechen # Beispiel: Formular ausf¨llen und absenden u form = browser.find_element_by_id(’myform’) input = form.find_element_by_name(’email’) input.clear() input.send_keys(’foo@example.com’) input.submit() # entspricht Enter im Input-Feld # Beispiel: Link klicken link = browser.find_element_by_link_text(’Anmelden’) link.click() # Beispiel: Elemente untersuchen elem = browser.find_element_by_class_name(’hidden’) elem.is_displayed() # --> False browser.find_element_by_link_text(’Show hidden’).click() elem.is_displayed() # --> True elem.location # --> {u’x’: 870, u’y’: 50} elem.size # --> {’height’: 29, ’width’: 90} elem.tag_name # --> ’div’ elem.text # --> ’text content of div’ Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 16. API – JavaScript browser.execute_script(’alert("Hello World!")’) Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 17. Web-Applikationen testen 1 #!/usr/bin/env python 2 3 import unittest 4 5 from selenium import webdriver 6 7 8 class TestTitle(unittest.TestCase): 9 10 def setUp(self): 11 # Toggle comments to test with a different browser 12 self.driver = webdriver.Chrome() 13 #self.driver = webdriver.Firefox() 14 #self.driver = wevdriver.Ie() 15 16 def tearDown(self): 17 self.driver.close() 18 19 def test_title_tag(self): 20 self.driver.get(’http://google.com’) 21 title_tag = self.driver.find_element_by_tag_name(’title’) 22 self.assertEqual(title_tag.text, ’Google’) 23 24 25 if __name__ == ’__main__’: 26 unittest.main() Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 18. Wait! Browser-Kommandos warten nicht (click, submit, JavaScript, ...) eigene Warteschleifen sind erforderlich (und sinnvoll!) Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 19. Wait! Browser-Kommandos warten nicht (click, submit, JavaScript, ...) eigene Warteschleifen sind erforderlich (und sinnvoll!) from selenium.webdriver.support.wait import WebDriverWait [...] elem = browser.find element by id(’save’) elem.click() # sendet POST, l¨dt die Seite neu a WebDriverWait(browser, 3).until( lambda x: x.find element by tag name(’body’)) Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 20. Page-Pattern class LoginPage(object): def login_as(self, username, password): # some magic return HomePage(self.browser) def login_expect_exception(self, username, password): # .... return LoginPage(self.browser) def get_exception(self): # .... return "that happened" Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 21. Page-Pattern class LoginPage(object): def login_as(self, username, password): # some magic return HomePage(self.browser) def login_expect_exception(self, username, password): # .... return LoginPage(self.browser) def get_exception(self): # .... return "that happened" The public methods represent the services that the page offers Try not to expose the internals of the page Generally don’t make assertions Methods return other PageObjects Need not represent an entire page Different results for the same action are modelled as different methods Quelle: http://code.google.com/p/selenium/wiki/PageObjects Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 22. sst – Selenium Simple Test Wrapper um selenium-Modul Einfache API, f¨r Testentwickler gedacht¡ u Parametrisierbare Tests Screenshots bei Fehlern Headless-Mode out-of-the-box (ben¨tigt xvfb) o Homepage: http://testutils.org/sst/ Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 23. sst – Selenium Simple Test 1 from sst.actions import * 2 3 go_to(’http://froscon.org’) 4 assert_title_contains(’FrOSCon’) 5 click_link(get_element(tag=’a’, text=’Program’)) 6 click_link(get_element(tag=’a’, text=’program of lectures’)) 7 assert_title_contains(’froscon2012: FrOSCon Program’) 8 click_link(get_element(tag=’a’, text_regex=’Day 2.*26$’)) 9 click_link(get_element(tag=’a’, text=’>’)) 10 click_link(get_element(tag=’a’, text_regex=’.*Selenium.*’)) 11 click_link(get_element(tag=’a’, text=’Click here’)) 12 set_radio_value(’event_feedback_rating_2’) 13 write_textfield( 14 ’event_feedback_comment’, 15 ’Yay! I’ve learned to automate feedback for my next FrOSCon talk!’) 16 take_screenshot(’/home/andi/Arbeitsfl¨che/feedback.png’) a 17 raw_input(’Done.’) Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 24. Demo, Fragen? Quelle: Classmates PC w Programmable Robot, by chang sen, on Flickr http://www.flickr.com/photos/senchang/5000312557/ Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012
  • 25. Danke! Links Python-Modul http://pypi.python.org/pypi/selenium/ Selenium-Homepage http://seleniumhq.org/ pyCologne http://pycologne.de, Treffen jeden 2. Mittwoch Kontakt E-Mail albrecht.andi@gmail.com Twitter @andialbrecht Homepage andialbrecht.de Selenium & WebDriver selenium-Python-Modul API Web-Applikationen testen Tipps & Tricks Demo Webbrowser-Automatisierung mit Python und Selenium WebDriver / Andi Albrecht / FrOSCon 2012