image.png

  1. BasePage.py
  2. BasePage:基类,封装各类常用的操作行为,便于后续测试流程中进行调用
  3. from time import sleep
  4. from selenium import webdriver
  5. class BasePage:
  6. # 临时driver
  7. # driver = webdriver.Chrome()
  8. # 访问url
  9. def open(self, url):
  10. self.driver.get(url)
  11. # 构造函数
  12. def __init__(self, driver):
  13. self.driver = driver
  14. # 元素定位
  15. def locator(self, loc):
  16. return self.driver.find_element(*loc)
  17. # 输入
  18. def input(self, loc, txt):
  19. self.locator(loc).send_keys(txt)
  20. # 点击
  21. def click(self, loc):
  22. self.locator(loc).click()
  23. # 等待
  24. def wait(self, time):
  25. sleep(time)
  26. # 悬停
  27. def action(self):
  28. pass
  1. login_page.py
  2. from selenium import webdriver
  3. from base.base_page import BasePage
  4. class LoginPage(BasePage):
  5. # 页面url
  6. url = 'http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html'
  7. # 页面核心元素
  8. user = ('name', 'accounts')
  9. pwd = ('name', 'pwd')
  10. # 找不到name属性
  11. button = ('xpath', '//button[text()="登录"]')
  12. # 登录操作流
  13. def login(self, name, password):
  14. self.open(self.url)
  15. self.input(self.user, name)
  16. self.input(self.pwd, password)
  17. self.click(self.button)
  18. self.wait(5)
  1. login.yaml
  2. -
  3. name: xuzhu666
  4. pwd: 123456
  5. -
  6. name: xuzhu123456
  7. pwd: 123456

这样会打开很多个浏览器,造成资源浪费

  1. case.py
  2. import unittest
  3. from ddt import file_data, ddt
  4. from selenium import webdriver
  5. from page_object.login_page import LoginPage
  6. @ddt
  7. class Case(unittest.TestCase):
  8. @file_data('../data/login.yaml')
  9. def test_01_login(self, name, pwd):
  10. driver = webdriver.Chrome()
  11. lp = LoginPage(driver)
  12. lp.login(name, pwd)
  13. if __name__ == '__main__':
  14. unittest.main()

修改后

  1. case.py
  2. import unittest
  3. from ddt import file_data, ddt
  4. from selenium import webdriver
  5. from page_object.login_page import LoginPage
  6. @ddt
  7. class Case(unittest.TestCase):
  8. @classmethod
  9. def setUpClass(cls) -> None:
  10. cls.driver = webdriver.Chrome()
  11. cls.lp = LoginPage(cls.driver)
  12. @file_data('../data/login.yaml')
  13. def test_01_login(self, name, pwd):
  14. self.lp.login(name, pwd)
  15. if __name__ == '__main__':
  16. unittest.main()