
BasePage.pyBasePage:基类,封装各类常用的操作行为,便于后续测试流程中进行调用from time import sleepfrom selenium import webdriverclass BasePage: # 临时driver # driver = webdriver.Chrome() # 访问url def open(self, url): self.driver.get(url) # 构造函数 def __init__(self, driver): self.driver = driver # 元素定位 def locator(self, loc): return self.driver.find_element(*loc) # 输入 def input(self, loc, txt): self.locator(loc).send_keys(txt) # 点击 def click(self, loc): self.locator(loc).click() # 等待 def wait(self, time): sleep(time) # 悬停 def action(self): pass
login_page.pyfrom selenium import webdriverfrom base.base_page import BasePageclass LoginPage(BasePage): # 页面url url = 'http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html' # 页面核心元素 user = ('name', 'accounts') pwd = ('name', 'pwd') # 找不到name属性 button = ('xpath', '//button[text()="登录"]') # 登录操作流 def login(self, name, password): self.open(self.url) self.input(self.user, name) self.input(self.pwd, password) self.click(self.button) self.wait(5)
login.yaml- name: xuzhu666 pwd: 123456- name: xuzhu123456 pwd: 123456
这样会打开很多个浏览器,造成资源浪费
case.pyimport unittestfrom ddt import file_data, ddtfrom selenium import webdriverfrom page_object.login_page import LoginPage@ddtclass Case(unittest.TestCase): @file_data('../data/login.yaml') def test_01_login(self, name, pwd): driver = webdriver.Chrome() lp = LoginPage(driver) lp.login(name, pwd)if __name__ == '__main__': unittest.main()
修改后
case.pyimport unittestfrom ddt import file_data, ddtfrom selenium import webdriverfrom page_object.login_page import LoginPage@ddtclass Case(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.driver = webdriver.Chrome() cls.lp = LoginPage(cls.driver) @file_data('../data/login.yaml') def test_01_login(self, name, pwd): self.lp.login(name, pwd)if __name__ == '__main__': unittest.main()