
BasePage.py
BasePage:基类,封装各类常用的操作行为,便于后续测试流程中进行调用
from time import sleep
from selenium import webdriver
class 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.py
from selenium import webdriver
from base.base_page import BasePage
class 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.py
import unittest
from ddt import file_data, ddt
from selenium import webdriver
from page_object.login_page import LoginPage
@ddt
class 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.py
import unittest
from ddt import file_data, ddt
from selenium import webdriver
from page_object.login_page import LoginPage
@ddt
class 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()