栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Selenium3与Python3实战Web自动化测试框架

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Selenium3与Python3实战Web自动化测试框架

课程地址

很多人被这门课的pom模型弄得云里雾里的,根据自己的整理,总结了本课程主要的类和对象的调用顺序:

1、数据驱动: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

2、read_ini.py 读取LocalElement.ini数据信息:

#coding=utf-8
import configparser
class ReadIni(object):
    def __init__(self,file_name=None,node=None):
 if file_name == None:
     file_name = "E:/Teacher/Imooc/SeleniumPython/config/LocalElement.ini"
 if node == None:
     self.node = "RegisterElement"
 else:
     self.node = node
 self.cf = self.load_ini(file_name)
    #加载文件
    def load_ini(self,file_name):
 cf = configparser.ConfigParser()
 cf.read(file_name)
 return cf
    #获取value得值
    def get_value(self,key):
 data = self.cf.get(self.node,key)
 return data
#if __name__ == '__main__':
#    read_init = ReadIni()
#    print(read_init.get_value('user_name'))

3、find_element.py 【调用read_ini.py,返回元素定位对象】

#coding=utf-8
from util.read_ini import ReadIni
from log.user_log import UserLog
class FindElement(object):
    def __init__(self,driver):
 self.driver = driver
 get_user_log = UserLog()
 self.logger = get_user_log.get_log()
    def get_element(self,key):
 read_ini = ReadIni()
 data = read_ini.get_value(key)
 by = data.split('>')[0]
 value = data.split('>')[1]
 self.logger.info("定位方式:"+by+"--->定位值:"+value)
 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

4、register_page.py【调用find_element.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_errorr")

5、register_handle.py 【调用register_page.py,通过元素对象输入值或者返回数据】

#coding=utf-8
from page.register_page import RegisterPage
import sys
from util.get_code import GetCode
from log.user_log import UserLog

class RegisterHandle(object):
    def __init__(self,driver):
 self.driver = driver
 self.register_p = RegisterPage(self.driver)
 get_user_log = UserLog()
 self.loger = get_user_log.get_log()
    #输入邮箱
    def send_user_email(self,email):
 self.loger.info("输入的邮箱值是:"+email)
 self.register_p.get_email_element().send_keys(email)
    
    #输入用户名
    def send_user_name(self,username):
 self.loger.info("输入的用户名是:"+username)
 self.register_p.get_username_element().send_keys(username)

    #输入密码
    def send_user_password(self,password):
 self.loger.info("输入的密码是:"+password)
 self.register_p.get_password_element().send_keys(password)
    
    #输入验证码
    def send_user_code(self,file_name):
 get_code_text = GetCode(self.driver)
 code = get_code_text.code_online(file_name)
 self.register_p.get_code_element().send_keys(code)
    
    #获取文字信息
    def get_user_text(self,info,user_info):
 try:
     if info == 'user_email_error':
  text = self.register_p.get_email_error_element().text
     elif info == 'user_name_error':
  text = self.register_p.get_name_error_element().text
     elif info == 'password_error':
  text = self.register_p.get_password_element().text
     else:
  text = self.register_p.get_code_element().text
 except:
     text = None     
 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

6、register_business.py 【调用register_handle.py的send_user_XXX和get_user_text方法】
– 先调用send_user_XXX将case数据传给register_handle处理,再调用get_user_text查看case是否正确

#coding=utf-8
from handle.register_handle import RegisterHandle
class RegisterBusiness:
    def __init__(self,driver):
 self.register_h = RegisterHandle(driver)

    def user_base(self,email,name,password,file_name):
 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(file_name)
 self.register_h.click_register_button()
    
    def register_succes(self):
 if self.register_h.get_register_text() == None:
     return True
 else:
     False

'''
    执行操作
    def login_email_error(self,email,name,password,file_name):
 self.user_base(email,name,password,file_name)   
 if self.register_h.get_user_text('email_error',"请输入有效的电子邮件地址") == None:
     #print("邮箱检验不成功")
     return True
 else:
     return False
'''
    def register_function(self,email,username,password,file_name,assertCode,assertText):
 self.user_base(email,username,password,file_name) #输入邮箱(假设错误的邮箱),user_email_error就会有值
 if self.register_h.get_user_text(assertCode,assertText) == None: # 表示text没值
     #print("邮箱输入正确,检验不成功")
     return True
 else:
     #print("邮箱输入错误,成功检验")
     return False # 表示text有值,邮箱输入错误被校验住了 
'''     
    #name错误
    def login_name_error(self,email,name,password,file_name):
 self.user_base(email,name,password,file_name)
 if self.register_h.get_user_text('user_name_error',"字符长度必须大于等于4,一个中文字算2个字符") == None:
     #print("用户名检验不成功")
     return True
 else:
     return False
    
    #密码错误
    def login_password_error(self,email,name,password,file_name):
 self.user_base(email,name,password,file_name)
 if self.register_h.get_user_text('password_error',"最少需要输入 5 个字符") == None:
     #print("密码检验不成功")
     return True
 else:
     return False

    #验证码错误
    def login_code_error(self,email,name,password,file_name):
 self.user_base(email,name,password,file_name)
 if self.register_h.get_user_text('code_text_error',"验证码错误") == None:
     #print("验证码检验不成功")
     return True
 else:
     return False
''' 

7、first_ddt_case.py 【调用register_business.py的register_function 方法】

#coding=utf-8
import ddt
import unittest
import sys
sys.path.append('E:\Teacher\Imooc\SeleniumPython')
import traceback
from business.register_business import RegisterBusiness
from selenium import webdriver
import HTMLTestRunner
from util.excel_util import ExcelUtil
import os
from log.user_log import UserLog
import time
ex = ExcelUtil() # 获取操作Excel的对象
data = ex.get_data() # 根据对象调用获取数据的方法获取数据,存放在data里
log = UserLog()
logger = log.get_log()
file_name = "E:/Teacher/Imooc/SeleniumPython/Image/test001.png"
#邮箱、用户名、密码、验证码、错误信息定位元素、错误提示信息
@ddt.ddt
class FirstDdtCase(unittest.TestCase):
    def setUp(self):
 self.driver = webdriver.Chrome()
 self.driver.get('http://www.5itest.cn/register')
 self.login = RegisterBusiness(self.driver)


    def tearDown(self):
 time.sleep(2)
 #if sys.exc_info()[0]:
 for method_name,error in self._outcome.errors:
if error:
    case_name = self._testMethodName
    file_path = os.path.join(os.getcwd()+"/report/"+case_name+".png")
    self.driver.save_screenshot(file_path)
 #print("这个是case的后置调键1")
 self.driver.close()
    '''
    @ddt.data(
     ['12','Mushishi01','111111','code','user_email_error','请输入有效的电子邮件地址'],
     ['@qq.com','Mushishi01','111111','code','user_email_error','请输入有效的电子邮件地址'],
     ['12@qq.com','Mushishi01','111111','code','user_email_error','请输入有效的电子邮件地址']
 )
    @ddt.unpack
    '''
    @ddt.data(*data) #data里存放着Excel里的数据
    def test_register_case(self,data):
	    #通过list赋值方式,将Excel里数据赋值到各个参数里
 email,username,password,self.file_name,assertCode,assertText = data  	
 email_error = self.login.register_function(email,username,password,self.file_name,assertCode,assertText)
 self.assertFalse(email_error,"测试失败")

if __name__ == '__main__':
    file_path = os.path.join(os.getcwd()+"/report/"+"first_case1.html")
    f = open(file_path,'wb')
    suite = unittest.TestLoader().loadTestsFromTestCase(FirstDdtCase)
    runner = HTMLTestRunner.HTMLTestRunner(stream=f,title="This is first report1",description=u"这个是我们第一次测试报告1",verbosity=2)
    runner.run(suite)
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号