二、PO模型之注册界面组装成完整的自动化case-5
- base层:基础层。获取配置文件中的元素值。
- page层:页面层。页面就是元素。将读取页面信息放在page中,page给handle提供页面元素。
- handle层:定义方法,调用page层。即处理page。config中的元素如何拿到handle中进行处理。
- business层:实例化handle层中的类。调用case层中的参数,handle层中的方法。
- case层:根据规则设计即可。实例化business层中的类。获取参数,调business层中的方法。
- first_case.py引用了register_business.py中的login函数。验证了邮箱错误。
- register_business.py引用了register_handle.py中的send_user_email()函数。用于输入邮箱。
- register_handle.py引用了register_page.py中的get_email_element()函数。用于获取邮箱元素。
- register_page.py引用了base层的LocalElement.ini配置的元素。
- find_element.py是用于逻辑处理。使用split拆分LocalElement.ini中的值。从而获取真正有用的值。
1、D:\imooc\selenium\config\LocalElement.ini
# 功能:配置文件夹config中的配置文件LocalElement.ini # 节点名称 [RegisterElement] # Element id_name and id_value user_email=id>register_email user_email_error=id>register_email-error user_name=id>register_nickname user_name_error=id>register_nickname-error user_password=id>register_password user_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
2、D:\imooc\selenium\base\find_element.py
# 功能:进行逻辑处理,获取配置文件中的元素值 # 编码格式 #coding=utf-8 # 导入util包的读取配置文件代码中的类 from util.read_ini import ReadIni # 封装class class FindElement(object): # 以构造函数方式传入driver(因为要用,所以必须传) 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
3、D:\imooc\selenium\page\register_page.py
# Name -- 页面层 -- # Function -- 获取页面元素信息-- # Time -- 2022.11.18 -- # Developer -- zhangjieqiong -- # coding=utf-8 from base.find_element import FindElement class RegisterPage(object): def __init__(self,driver): self.find_element = FindElement(driver) # 获取邮箱元素 def get_email_element(self): self.find_element.get_element("user_email") def get_username_element(self): self.find_element.get_element("user_name") def get_password_element(self): self.find_element.get_element("user_password") def get_code_element(self): self.find_element.get_element("code_text") def get_button_element(self): self.find_element.get_element("register_button") def get_email_error_element(self): return self.find_element.get_element("user_email_error") def get_name_error_element(self): return self.find_element.get_element("user_name_error") def get_password_error_element(self): return self.find_element.get_element("user_password_error") def get_code_error_element(self): return self.find_element.get_element("code_text_error")
4、D:\imooc\selenium\handle\register_handle.py
# Name -- 操作层 -- # Function -- 处理注册项样本-- # Time -- 2022.10.19 -- # Developer -- zhangjieqiong -- # 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,user_email): self.register_p.get_email_element().send_keys(user_email) # 输入用户名 def send_user_name(self,user_name): self.register_p.get_username_element().send_keys(user_name) # 输入密码 def send_user_password(self,user_password): self.register_p.get_password_element().send_keys(user_password) # 输入验证码 def send_user_code(self,code_text): self.register_p.get_code_element().send_keys(code_text) # 获取文字信息 # user_info判断邮箱错误还是用户名错误 def get_user_text(self,user_info): if user_info == 'user_email_error': self.register_p.get_email_error_element().get_attribute('value') elif user_info == 'user_name_error': self.register_p.get_name_error_element.get_attribute('value') # 点击注册按钮 def click_register_button(self): pass
5、D:\imooc\selenium\business\register_business.py
# Name -- 业务层 -- # Function -- 执行操作层(注册页面) -- # Time -- 2022.11.17 -- # Developer -- zhangjieqiong -- # 通过handle获得的文字信息判断是否成功 # 是case和handle的桥梁 # coding=utf-8 # 需要实例化一个handle层 # 是从handle包中的register_handle.py导入了RegisterHandle类 from handle.register_handle import RegisterHandle class RegisterBusiness(object): # 在构造方法中,进行实例化RegisterHandle类 def __init__(self,driver): # register是局部的,self.register是全局的变量。 self.register_h = RegisterHandle(driver) # 执行操作 def login(self,user_email,user_name,user_password,code): # 括号中的email是case层传下来的 # self.register调用了handle层中的send_user_email()方法 self.register_h.send_user_email(user_email) self.register_h.send_user_name(user_name) self.register_h.send_user_password(user_password) self.register_h.send_user_code(code) self.register_h.click_register_button() if self.register_h.get_user_text("请输入有效的电子邮箱地址"): print("邮箱检验成功") return True else: return False # elif self.register_h.get_user_text("字符长度必须大于等于4,一个中文字算2个字符"): # print("用户名检验成功") # elif self.register_h.get_user_text(""): # print("用户名检验成功") # return True
6、D:\imooc\selenium\case\first_case.py
# Name -- 样例层 -- # Function -- 注册项样本 -- # Time -- 2022.10.19 -- # Developer -- zhangjieqiong -- # coding=utf-8 # 需要实例化一个business层 # 是从business包中的register_business.py的RegisterBusiness类 from business.register_business import RegisterBusiness class FirstCase(object): # 在构造方法中,进行实例化RegisterBusiness类,命名为login def __init__(self): self.login = RegisterBusiness() # 邮箱错误 def test_login_email_error(self): self.login.login('34','user11',) # 通过assert判断是否为error pass # 用户名错误 def test_login_username_error(self): pass # 密码错误 def test_login_password_error(self): pass # 验证码错误 def test_login_code_error(self): pass # 成功 def test_login_success(self): pass