python selenium 多個頁面對象類使用同一個webdriver(即只打開一個瀏覽器窗口)


 1 class BasePage():
 2     """selenium基類"""
 3 
 4     def __init__(self, driver=None):
 5         self.log = Log().logger
 6         self.report = cm.allure_json
 7         self.broswer = CONF.web_broswer or 'firefox'
 8         self.base_url = CONF.web_url
 9         self.timeout = 6
10         if driver is None:
11             self.set_driver(self.broswer)
12         else:
13             self.driver = driver
14             self.wait = WebDriverWait(self.driver, self.timeout)
15             self.action_chain = ActionChains(self.driver)
16 
17     def set_driver(self, driver):
18         if 'chrome' == driver.lower().strip():
19             options = chrome_op()
20             options.add_argument("--ignore-certificate-errors")
21             self.driver = webdriver.Chrome(os.path.join(cm.DRIVER_PATH, 'chromedriver'),
22                                            chrome_options=options)
23         elif 'firefox' == driver.lower().strip():
24             binary_file = CONF.firefox_binary or '/usr/bin/firefox-esr'
25             executable_path = os.path.join(cm.DRIVER_PATH, 'geckodriver')
26             options = firefox_op()
27             options.binary = FirefoxBinary(binary_file)
28             service = Service(executable_path=executable_path)
29             my_profile = webdriver.FirefoxProfile()
30             my_profile.accept_untrusted_certs = True
31             self.driver = webdriver.Firefox(firefox_profile=my_profile, options=options,
32                                             service=service)
33         else:
34             raise Exception('暫不支持%s瀏覽器驅動' % driver)
35         self.wait = WebDriverWait(self.driver, self.timeout)
36         self.action_chain = ActionChains(self.driver)

10~15行代碼,當實例化對象時,如果driver參數為None(默認),則調用set_driver方法設置webdriver,否則設置對象的driver屬性為傳入的driver參數。

使用方法如下:

class Test260161_ECS():
    def setup(self) -> None:
        self.ecs_manager_page = ecs_manager_page

    def teardown(self) -> None:
        if getattr(self, 'ecs_name', False):
            self.ecs_manager_page.search_ecs('名稱', self.ecs_name)
            result = self.ecs_manager_page.check_ecs_table_iszero()
            if result == False:
                self.ecs_manager_page.clear_ecs('名稱', self.ecs_name)
            bin_manager_page = BINManagerPage(driver=self.ecs_manager_page.driver)
            bin_manager_page.clear_bin(self.ecs_name)

在ecs_manager_page作為主測對象,bin_manager_page作為輔測對象,主測對象ecs_manager_page實例化話,不傳driver參數;而輔測對象bin_manager_page實例化時,driver參數傳入ecs_manager_page.driver屬性。從而可以達到多個頁面對象類使用同一個driver,

執行測試用例時,只會打開一個web窗口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM