2012-07-10 71 views
7

目前我正在嘗試使用Selenium和Proboscis編寫一個自動化測試套件。我試圖抽象webdriver並通過工廠模式實現。 Page_object類也在這裏創建,它在創建對象時將webdriver作爲參數。以下是代碼。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() 

這是做這件事的正確方法嗎?或者有更好的解決方案嗎? 如果你發現一些愚蠢的話,請指出並忽略我的疏忽,因爲我是Python和Selenium的新手。

+1

真的很驚訝,這個問題沒有得到太多的關注:( – 2012-08-24 20:10:38

回答

2

您正在正確實施頁面對象,因爲您按大多數人的方式執行該操作。

我已經做了頁面對象有點不同 - 不需要webdriver來實例化它們。因爲我經常碰到幾個不同主體內容的頁面,但是頁眉和頁腳部分是相同的。因此,不是在每個頁面對象中重複頁眉/頁腳定位器和方法,而是爲頁眉提供單獨的頁面obj,而僅用於頁腳。但隨後使用1個webdriver實例化多個頁面對象來測試單個頁面,似乎違反了範例。所以我的頁面對象實際上只是一個定位器和方法的集合,並不一定是一個webdriver。

我意識到你沒有提到頁眉或頁腳......我猜爲什麼大多數人圍繞webdriver構建他們的頁面對象的原因是創建一個範例,每個頁面只假設一個頁面對象。在我的情況下,這會導致跨頁對象的代碼重複。需要考慮的事情。希望有所幫助!

+1

帕特米克,你有一些例子來分享我正在尋找嗎?順便說一句,目前使用[this](https:// github。 com/ncbi/robotframework-pageobjects)作爲起點,並結合'機器人框架'。正如你所提到的,有一些共同的對象,不想在每一頁上重複。也沒有太多的手來獲取'inheretence'來獲取它加工。 – Rao 2016-02-10 04:57:32