2012-07-10 9 views
7

Obecnie próbuję napisać zautomatyzowany zestaw testów przy użyciu Selenium i Trąbik. Próbuję wyodrębnić webdrivera i implementować przez wzorzec fabryczny. Page_object jest tu również tworzona klasa, która pobiera webdriver jako argument podczas tworzenia obiektu. Poniżej znajduje się kod.Fabryczny wzór dla Selenium Webdriver

 import selenium.webdriver as webdriver 
    from proboscis import TestProgram 
    from proboscis import test 
    from proboscis import before_class 
    from proboscis import after_class  

    class WebdriverFactory: 
     @staticmethod 
     def getWebdriver(browserName): 
      if(browserName == 'firefox'): 
      return webdriver.Firefox() 
      elif(browserName == 'chrome'): 
      return webdriver.Chrome() 
      elif(browserName == 'ie'): 
      return webdriver.Ie()   

      raise Exception("No such " + browserName + " browser exists") 

    class Page_Object: 
    def __init__(self, driver): 
     self.driver = driver 

    def go_to_home(self): 
     self.driver.get("http://google.com") 
     return self 
    def go_to_page(self,url): 
     self.driver.get(url) 
     return self 
    def run_search(self, url, query): 
     self.driver.get(url) 
     self.driver.find_element_by_id(locators['search_box']).send_keys(query) 
     self.driver.find_element_by_id(locators['search_button']).click() 

    def tear_down(self): 
     self.driver.close() 

    @test(groups=['selenium']) 
    class Test_Scripts: 

    @test(groups=['WebDemo']) 
    def test_1(self): 
     driver = WebdriverFactory.getWebdriver("firefox") 
     pageObj = Page_Object(driver) 
     pageObj.run_search("http://google.com",'apples') 
     pageObj.tear_down()  
    def run_tests(self): 
     TestProgram().run_and_exit() 

    Test_Scripts().run_tests() 

Czy to właściwy sposób? A może są jakieś lepsze rozwiązania? Jeśli znajdziesz coś głupiego, proszę wskazać i zignorować moje zaniedbanie, ponieważ jestem nowy w Pythonie i Selenie.

+1

Naprawdę zaskoczony, że to pytanie nie ma zbyt wiele uwagi :( –

Odpowiedz

2

Poprawnie implementujesz obiekt strony, ponieważ robisz to tak, jak robi to większość ludzi.

Zrobiłem obiekty strony trochę inaczej - nie wymagające oprogramowania do utworzenia instancji. Ponieważ często napotykam kilka stron o różnej treści ciała, ale identyczne sekcje nagłówka i stopki. Więc zamiast duplikować lokalizatory nagłówków/stopek i metody w każdym obiekcie strony, mam oddzielną stronę obj tylko dla nagłówka i tylko dla stopki. Ale użycie 1 webdrivera do utworzenia wielu obiektów na stronie w celu przetestowania pojedynczej strony, wydawało się naruszać paradygmat. Tak więc moje obiekty strony są po prostu zbiorem lokalizatorów i metod, a niekoniecznie jest to webdriver.

Zdaję sobie sprawę, że nie wspomniałeś nagłówków ani stopek ... Myślę, że powodem, dla którego większość ludzi tworzy obiekty strony wokół webdrivera, jest stworzenie paradygmatu, który zakłada tylko 1 obiekt strony na stronę. W moim przypadku spowodowałoby to duplikowanie kodu na obiektach strony. Coś do rozważenia. Mam nadzieję, że pomaga!

+1

Pat Meeker, czy masz jakiś przykład do udostępnienia, którego dokładnie szukam? Przy okazji, obecnie używasz [this] (https: // github. com/ncbi/robotframework-pageobjects) jako punkt wyjścia, w połączeniu z 'ramą robotów '.Jak wspomniałeś, są wspólne obiekty i nie powtarzają się na każdej stronie.Niewiele rąk na pythonie dla uzyskania' niesprawności', aby je uzyskać pracujący. – Rao

Powiązane problemy