2012-07-10 10 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

この質問はあまり注目されていませんでした。( –

答えて

2

ページオブジェクトを正しく実装しています。ほとんどの人のやり方と同じようにしています。

私はページオブジェクトを少し違ってやりました。ウェブオブジェクトをインスタンス化する必要はありません。なぜなら、私はしばしば、異なる本文の内容を持ついくつかのページに出くわしますが、ヘッダーセクションとフッターセクションは同じです。ヘッダー/フッターのロケーターとメソッドを各ページオブジェクトに複製するのではなく、ヘッダーのためだけに、フッターのために別のページobjがあります。しかし、1つのWebdriverを使って複数のページオブジェクトをインスタンス化して1つのページをテストすることは、パラダイムに違反しているようです。ですから、私のページオブジェクトは実際にはロケータとメソッドのコレクションであり、必ずしもwebdriverではありません。

ヘッダーやフッターは言及していないことに気付きました。私は、ほとんどの人がWebdriverのページオブジェクトを作成するのは、ページあたり1ページのオブジェクトしか想定していないというパラダイムを作り出す理由です。私の場合、それはページオブジェクト全体で重複したコードになりました。考慮すべき何か。希望が助けてくれる!

+1

Pat Meeker、私が正確に探しているものを共有する例がありますか?あなたが言及したように、共通のオブジェクトがあり、各ページで繰り返すのは好きではありません。また、Pythonがそれを取得するために不変であることはほとんどありません。ワーキング。 – Rao