9

目前我正在尝试使用 Selenium 和 Proboscis 编写一个自动化测试套件。我正在尝试抽象 webdriver 并通过工厂模式实现。Page_object这里也创建了类,它在创建对象时将 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

您正在正确地实现页面对象,因为您正在按照大多数人的方式进行操作。

我做了一些不同的页面对象——不需要网络驱动程序来实例化它们。因为我经常遇到几个页面,它们的正文内容不同,但页眉和页脚部分相同。因此,我没有在每个页面对象中复制页眉/页脚定位器和方法,而是为页眉和页脚设置了一个单独的页面 obj。但是随后使用 1 个 webdriver 实例化多个页面对象来测试单个页面,似乎违反了范式。所以我的页面对象实际上只是定位器和方法的集合,不一定是 webdriver。

我意识到你没有提到页眉或页脚......我猜大多数人围绕 web 驱动程序构建页面对象的原因是创建一个范式,它假设每页只有一个页面对象。在我的情况下,这将导致跨页面对象的重复代码。需要考虑的事情。希望有帮助!

于 2014-10-08T23:09:34.990 回答
0

有一个 Python 库,它提供页面工厂方法来在 selenium 中实现页面对象模型 -

硒页工厂

于 2020-03-12T08:41:53.897 回答