selenium web自动化 - pageobjects的行为封装

# 自动化测试框架

  1. 测试报告   -  allure测试报告 : https://www.cnblogs.com/jizg/p/16021487.html

  2. 测试用例

  3. 日志、失败截图

  4. 用例筛选

   解决问题:

  1) 日志,失败截图

    日志: 记录用例的执行过程

    失败截图: 用例失败了,在失败的操作截图当前页面

    将 selenium webdriver api 封装为方法,在方法中加入 日志,失败截图,这样能够避免代码重复

 

 # 封装哪些 api

class Basepage:
    # 将log 日志封装为一个方法
    logger = FileHandler(name=yaml_path['logger']['name'], level=yaml_path['logger']['level'], 
                         log_file=yaml_path['logger']['log_url']+yaml_path['logger']['file'])
    
    # 初始化Webdriver
    def __init__(self, driver:WebDriver):
        self.driver = driver

  1. 等待可见

from selenium.webdriver.support import expected_conditions as EC

def wait_ele_visit(self, loc, img_name, timeout=20, poll_fre=0.5):
    """
            :param loc: 元素
            :param img_name: 图片名
            :param timeout: 等待时间
            :param poll_fre:  默认0.5秒寻找一次
            :return:
     """
    self.logger.info("等到元素可见:{}".format(loc))
    try:
        WebDriverWait(self.driver, timeout, poll_fre).until(EC.visibility_to_element_located(loc))
    except:
        # 失败后截图,打印日志并抛出异常
        self.save_page_shot(img_name)
        self.logger.exception("等待元素可见失败:{}".format(loc))
        raise

  2. 查找元素

def get_element(self, loc, img_name):
    """
            :param loc: 元素
            :param img_name: 图片名
            :return:
     """
    self.logger.info("在 {} 页面查找元素:{}".format(img_name, loc))
    try:
        self.driver.find_element(*loc)
    except:
        self.save_page_shot(img_name)
        self.logger.exception("在 {}页面查找元素失败: {}".format(img_name, loc))
        raise

  3. 点击

def cilck_element(self, loc, img_name, timeout=20, poll_fre=0.5):
    """
            :param loc: 元素
            :param img_name: 图片名
            :param timeout: 等待时间
            :param poll_fre:  默认0.5秒寻找一次
            :return:
     """
    self.logger.info("在 {} 页面点击元素:{}".format(img_name, loc))
    # 调用等待元素可见方法
    self.wait_ele_visit(loc, imag_name, timeout, poll_fre)
    ele = slef.get_element(loc)
    try:
        ele.click()
    except:
        self.save_page_shot(img_name)
        self.logger.exception("点击元素{}失败!".format(loc))
        raise

  4. 输入

def wait_ele_visit(self, loc, img_name, value, timeout=20, poll_fre=0.5):
    """
            :param loc: 元素
            :param img_name: 图片名
            :param timeout: 等待时间
            :param poll_fre:  默认0.5秒寻找一次
            :return:
     """
    self.logger.info("在 {} 页面,输入框{},输入:{}".format(loc,img_name,value))
    self.wait_ele_visit(loc, img_name)
    ele.get_element(loc)
    try:
        ele.send_keys(value)
    except:
        self.save_page_shot(img_name)
        self.logger.exception("文本框输入失败!{}".format(loc))
        raise

  5. 获取文本

def wait_ele_visit(self, loc, img_name, timeout=20, poll_fre=0.5):
    """
            :param loc: 元素
            :param img_name: 图片名
            :param timeout: 等待时间
            :param poll_fre:  默认0.5秒寻找一次
            :return:
     """
    self.logger.info("等到元素可见:{}".format(loc))
    WebDriverWait(loc, img_name)
    ele = self.get_element(loc)
    try:
        value = ele.text
    except:
        self.save_page_shot(img_name)
        self.logger.exception("查找元素失败!")
        raise
    else:
        self.logger.info("{}元素获取的文本值是:{}".format(img_name, value))
        return value

  6. 页面截图

def save_page_shot(self, img_name)
    now_time = time.strftime("%Y-%m-%d %H_%M_%S")
    file_name = "{}_{}.png".format(img_name, now_time)
    self.driver.save_screenshot("存储路径。。。。" + file_name)
    self.logger.info("图片保存在 {}".format("图片存储:"+file_name))

 

posted @ 2022-03-15 10:54  JiZhaoG  阅读(88)  评论(0)    收藏  举报