zoukankan      html  css  js  c++  java
  • web自动化测试中的PO模式(三)----提取basepage及封装基本函数

    1、封装基础函数---执行日志、异常处理、失败截图等操作

    2、提取所有页面公共的部分

    新建一个包Common,在包中新建一个basepage.py

    1、提取初始化函数

    1 class BasePage:
    2     # 初始化函数
    3     def __init__(self,driver):
    4         self.driver=driver
    5         self.log=MyLogger()

    2、封装基础函数

     1 from selenium.webdriver.support import expected_conditions as EC
     2 from selenium.webdriver.support.wait import WebDriverWait
     3 import os
     4 from Common.tools.get_file_path import *
     5 import datetime
     6 class BasePage:
     7     # 初始化函数
     8     def __init__(self,driver):
     9         self.driver=driver
    10         self.log=MyLogger()
    11 
    12     # 等待元素可见
    13     def wait_eleVisible(self,locator,times=30,poll_frequency=0.5,doc=''):
    14         '''
    15         :param locator: 元素定位。元组形式(元素定位类型,元素定位方式)
    16         :param times: 等待时间
    17         :param poll_frequency: 等待时间间隔 ,每0.5秒查看一次
    18         :param doc: 截屏函数的形参
    19         :return:
    20         '''
    21         self.log.info("等待元素{0}可见".format(locator))
    22         try:
    23             # 开始等待的时间
    24             start=datetime.datetime.now()
    25             WebDriverWait(self.driver,times,poll_frequency).until(EC.visibility_of_element_located(locator))
    26             #结束等待的时间
    27             end = datetime.datetime.now()
    28             #等待时长
    29             wait_time=(end-start).seconds
    30             self.log.info('等待结束,等待时长为:{0}'.format(wait_time))
    31         except:
    32             self.log.error("等待元素可见失败,异常为:{0}".format(e))
    33             #截图
    34             self.save_screenshot(doc)#失败截图操作
    35             raise
    36 
    37     #截图操作
    38     def save_screenshot(self,name):
    39         # 图片名称:模块名_页面名称_操作名称_时间(年-月-日_时分秒).png
    40         file_name=os.path.join(GetFilePath.screenshots_path,'{0}_{1}.png').format(name,datetime.datetime.now().strftime('%c'))#时间格式化输出
    41         self.driver.save_screenshot(file_name)
    42         self.log.info("截取网页成功。文件路径为:{0}".format(file_name))

     3、提取的basepage.py中的封装函数在页面对象中使用

    1、使用basepage.py之前的代码

     1 from selenium.webdriver.support import expected_conditions as EC
     2 from selenium.webdriver.support.wait import WebDriverWait
     3 from PageLocators.loginpage_locators import LoginPageLocator as loc
     4 class LoginPage:
     5     def __init__(self,driver):
     6         self.driver=driver
     7 
     8     def login(self,username,pwd,remember_user=True):
     9         # 等待定位元素出现
    10         WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc.user_text))
    11         # 输入用户名
    12         self.driver.find_element(*loc.user_text).send_keys(username)
    13         # 输入密码
    14         self.driver.find_element(*loc.pwd_text).send_keys(pwd)
    15         # 定位记住手机号元素
    16         remember_ele=self.driver.find_element(*loc.remember)
    17         # 判断时候记住手机号
    18         if remember_user==True:
    19             remember_ele.checked=True
    20         else:
    21             remember_ele.checked=False
    22         # 点击登录
    23         self.driver.find_element(*loc.login_btn).click()

        2、使用basepage.py之后的代码

     1 from PageLocators.loginpage_locators import LoginPageLocator as loc
     2 from Common.basepage import BasePage
     3 class LoginPage(BasePage):
     4     def login(self,username,pwd,remember_user=True):
     5         doc='登录页面_登录功能'
     6         # 等待定位元素出现
     7         self.wait_eleVisible(loc.user_text,doc=doc)
     8         # 输入用户名
     9         self.input_text(loc.user_text,username,doc=doc)
    10         # 输入密码
    11         self.input_text(loc.pwd_text, pwd, doc=doc)
    12         # 定位记住手机号元素
    13         remember_ele=self.get_element(loc.remember)
    14         # 判断时候记住手机号
    15         if remember_user==True:
    16             remember_ele.checked=True
    17         else:
    18             remember_ele.checked=False
    19         # 点击登录
    20         self.click_element(loc.login_btn,doc=doc)

      basepage.py文件中初始化函数和封装基础函数,在封装基础函数的同时,将异常捕获、日志信息、失败截图等操作都封装到了自定义的函数中,调用后不用再对函数进行异常捕获,使用起来比较方便、简介、结构清晰、出现问题容易查找问题等

      4、失败截屏操作函数

    1     #截图操作
    2     def save_screenshot(self,doc):
    3         # 图片名称:模块名_页面名称_操作名称_时间(年-月-日_时分秒).png
    4         file_name=os.path.join(GetFilePath.screenshots_path,'{0}_{1}.png').format(doc,datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S'))
    5         try:
    6             file=self.driver.save_screenshot(file_name)
    7             self.log.info("截取网页成功。文件路径为:{0}".format(file_name))
    8         except:
    9             self.log.error("截图失败")
  • 相关阅读:
    webstorm激活方法webstorm注册码 jetbrains激活
    Android获取通讯录并上传(包含通讯录加密)
    2018,愿跟大家一起成长!
    Android Activity的4种启动模式
    微信SDK登录无法调起,微信SDK无法接收回调的几种解决办法
    Android报“android.content.res.Resources$NotFoundException: String resource ID #0x2”错误
    eclipse 和 android studio 编译时报 Unsupported major.minor version 52.0错解决办法
    Git – fatal: Unable to create ‘/.git/index.lock’: File exists错误解决办法
    android中xmlns:tools属性详解
    .NET Core 3.1 跨域请求 (CORS)
  • 原文地址:https://www.cnblogs.com/wsk1988/p/12738619.html
Copyright © 2011-2022 走看看