9

現在、Selenium と Proboscis を使用して自動テスト スイートを作成しようとしています。私は webdriver を抽象化し、ファクトリ パターンを使用して実装しようとしています。Page_objectclass もここで作成され、オブジェクトの作成中に 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を初めて使用するので、愚かなことを見つけた場合は、私の過失を指摘して無視してください。

4

2 に答える 2

4

ほとんどの人が行うように、ページ オブジェクトを正しく実装しています。

私はページ オブジェクトを少し違った方法で作成しました - それらをインスタンス化するために webdriver を必要としません。本文の内容は異なるが、ヘッダーとフッターのセクションが同じである複数のページによく遭遇するためです。したがって、各ページ オブジェクトでヘッダー/フッター ロケーターとメソッドを複製するのではなく、ヘッダー専用とフッター専用の個別のページ obj を用意しています。しかし、1 つの Web ドライバーを使用して複数のページ オブジェクトをインスタンス化し、1 つのページをテストすることは、パラダイムに違反しているように見えました。したがって、私のページ オブジェクトは実際には単なるロケーターとメソッドのコレクションであり、必ずしも Web ドライバーではありません。

ヘッダーやフッターについて言及していないことに気づきました...ほとんどの人がWebドライバーを中心にページオブジェクトを構築する理由は、ページごとに1つのページオブジェクトのみを想定するパラダイムを作成するためだと思います. 私の場合、ページ オブジェクト間でコードが重複することになります。考慮すべきこと。それが役立つことを願っています!

于 2014-10-08T23:09:34.990 に答える