通过设计po模型,对页面定位和页面操作进行分离封装,实现多用例的测试。
总体结构:
case(用例)→business(业务层)→handle(操作层)→page(页面层)→base(公用)
一.用例层first_case.py
# coding = utf-8
from business.register_business import RegisterBusiness
from selenium import webdriver
class FirstCase(object):
def __init__(self):
driver = webdriver.Chrome()
driver.get("http://www.5itest.cn/register")
self.login = RegisterBusiness(driver)
def test_login_email_error(self):
email_error = self.login.login_email_error('34', 'user11111', '111111', 'test1')
if email_error:
print("注册成功,此条case执行失败")
# 通过assert判断是否为error
def test_login_username_error(self):
username_error = self.login.login_name_error('vfdvd@qq.com', 'ss', '11111', 'test1')
if username_error:
print("注册成功,此条case执行失败")
def test_login_password_error(self):
password_error = self.login.login_password_error('vfdvd@qq.com', 'user11111', '1111', 'test1')
if password_error:
print("注册成功,此条case执行失败")
def test_login_code_error(self):
code_error = self.login.login_code_error('vfdvd@qq.com', 'user11111', '11111', 'test1')
if code_error:
print("注册成功,此条case执行失败")
def test_login_success(self):
self.login.user_base('vfdvd@qq.com', 'user11111', '11111', 'test1')
if self.login.register_success():
print("注册成功")
def main():
first = FirstCase()
first.test_login_email_error()
first.test_login_username_error()
first.test_login_password_error()
first.test_login_code_error()
first.test_login_success()
if __name__ == '__main__':
main()
二.业务层
register_business.py
# coding = utf-8
from handle.register_handle import RegisterHandle
class RegisterBusiness(object):
def __init__(self, driver):
self.register_h = RegisterHandle(driver)
def user_base(self, email, name, password, code):
self.register_h.send_user_email(email)
self.register_h.send_user_name(name)
self.register_h.send_user_password(password)
self.register_h.send_user_code(code)
self.register_h.click_register_button()
def register_success(self):
return self.register_h.get_register_text()
# 执行操作
def login_email_error(self, email, name, password, code):
self.user_base(email, name, password, code)
if self.register_h.get_user_text('email_error', "请输入有效的电子邮件地址") is None:
print("邮箱检验不成功")
return True
else:
return False
# name错误
def login_name_error(self, email, name, password, code):
self.user_base(email, name, password, code)
if self.register_h.get_user_text('user_name_error', "字符长度必须大于等于4,一个中文字算2个字符") is None:
print("用户名检验不成功")
return True
else:
return False
# 密码错误
def login_password_error(self, email, name, password, code):
self.user_base(email, name, password, code)
if self.register_h.get_user_text('password_error', "最少需要输入 5 个字符") is None:
print("密码检验不成功")
return True
else:
return False
# 密码错误
def login_code_error(self, email, name, password, code):
self.user_base(email, name, password, code)
if self.register_h.get_user_text('code_text_error', "验证码错误") is None:
print("验证码检验不成功")
return True
else:
return False
三.操作层
register_handle.py
# coding=utf-8
from page.register_page import RegisterPage
class RegisterHandle(object):
def __init__(self, driver):
self.register_p = RegisterPage(driver)
# 输入邮箱
def send_user_email(self, email):
self.register_p.get_email_element().send_keys(email)
pass
# 输入用户名
def send_user_name(self, username):
self.register_p.get_username_element().send_keys(username)
# 输入密码
def send_user_password(self, password):
self.register_p.get_password_element().send_keys(password)
# 输入验证码
def send_user_code(self, code):
self.register_p.get_code_element().send_keys(code)
# 获取文字信息
def get_user_text(self, info, user_info):
if info == 'email_error':
text = self.register_p.get_email_error_element().get_attribute('textContent')
elif info == 'name_error':
text = self.register_p.get_name_error_element().get_attribute('textContent')
elif info == 'password_error':
text = self.register_p.get_password_error_element().get_attribute('textContent')
else:
text = self.register_p.get_code_error_element().get_attribute('textContent')
return text
# 点击注册按钮
def click_register_button(self):
self.register_p.get_button_element().click()
def get_register_text(self):
return self.register_p.get_button_element().text
四.页面层
register_page.py
# coding = utf-8
from base.find_element import FindElement
class RegisterPage(object):
def __init__(self, driver):
self.fd = FindElement(driver)
# 获取邮箱元素
def get_email_element(self):
return self.fd.get_element("user_email")
def get_username_element(self):
return self.fd.get_element("user_name")
def get_password_element(self):
return self.fd.get_element("password")
def get_code_element(self):
return self.fd.get_element("code_text")
def get_button_element(self):
return self.fd.get_element("register_button")
def get_email_error_element(self):
return self.fd.get_element("user_email_error")
def get_name_error_element(self):
return self.fd.get_element("user_name_error")
def get_password_error_element(self):
return self.fd.get_element("password_error")
def get_code_error_element(self):
return self.fd.get_element("code_text_error")
五.公用
find_element.py
# coding=utf-8
from util.read_ini import ReadIni
class FindElement(object):
def __init__(self, driver):
self.driver = driver
def get_element(self, key):
read_ini = ReadIni()
data = read_ini.get_value(key)
by = data.split('>')[0]
value = data.split('>')[1]
try:
if by == 'id':
return self.driver.find_element_by_id(value)
elif by == 'name':
return self.driver.find_element_by_name(value)
elif by == 'className':
return self.driver.find_element_by_class_name(value)
else:
return self.driver.find_element_by_xpath(value)
except:
return None
六.配置文件
LocalElement.ini
[RegisterElement] user_email=id>register_email user_email_error=id>register_email-error user_name=id>register_nickname user_name_error=id>register_nickname-error password=id>register_password password_error=id>register_password-error code_image=id>getcode_num code_text=id>captcha_code code_text_error=id>captcha_code-error register_button=id>register-btn
po模型尚存在的问题:验证码识别 输入框清空



