公共的-Common目录

image.png

basepage.py

"""
    所有框架公共的部分
"""
import logging
import datetime
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from Common import dir_config
from selenium.webdriver.common.by import By
"""
    封装基本函数 - 执行日志,异常处理,失败截图
    所有页面基本操作
"""
#封装基本函数 - 执行日志,异常处理,失败截图
#所有页面基本操作
class BasePage:
    def __init__(self,driver):
        self.driver = driver

    #等待元素可见
    def wait_eleVisible(self,locator,times=30,poll_frequency=0.5,doc=""):
        """
        :param locator: 元素定位,元组形式(元素定位类型,元素定位方式)
        :param times: 等待时间
        :param poll_frequency:间隔多长时间轮询一次
        :param doc :模块名_页面名称_操作名称
        :return:
        """
        logging.info("等待元素 {} 可见".format(locator))
        try:
            #开始等待时间
            start =datetime.datetime.now()
            WebDriverWait(self.driver,times,poll_frequency).until(EC.visibility_of_element_located(locator))
            # 结束等待时间
            end = datetime.datetime.now()
            #求差值,写在日志中,等待了多久
            wait_times = (end-start).seconds
            logging.info("等待时长为{}".format(wait_times))
        except:
            #捕获异常到日志中
            logging.exception("等待元素可见失败")
            #截图操作
            self.save_screenshot(doc)
            raise
    #等待元素存在
    def wait_elePresence(self):
        pass

    #查找元素
    def get_element(self,locator,doc=""):
        """
        :param locator: 元素定位
        :param doc: 截图的模块名_页面名称_操作名称
        :return:
        """
        logging.info("{0}查找元素:{1}".format(doc,locator))
        try:
            # 通过查看源码得到return find_element(by=By.XPATH,value=name),所以参数传tuple
            return self.driver.find_element(*locator)
        except:
            logging.exception("查找元素失败!!!")
            self.save_screenshot(doc)
            raise

    def get_elements(self, locator, doc=""):
        """
        :param locator: 元素定位
        :param doc: 截图的模块名_页面名称_操作名称
        :return:
        """
        #查找元素
        logging.info("{0}:开始查找负荷表达式的所有元素:{1}".format(doc, locator))
        try:
            # 通过查看源码得到return find_element(by=By.XPATH,value=name),所以参数传tuple
            return self.driver.find_elements(*locator)
        except:
            logging.exception("查找元素失败!!!")
            self.save_screenshot(doc)
            raise

    #点击操作
    def click_element(self,locator,doc=""):
        #找元素
        ele= self.get_element(locator,doc)
        #元素操作
        logging.info("{0} 点击元素:{1}".format(doc,locator))
        try:
            ele.click()
        except:
            logging.exception("元素点击失败!!!")
            #截图
            self.save_screenshot(doc)
            raise

    #输入操作
    def input_text(self,locator,text,doc=""):
        # 找元素
        ele = self.get_element(locator, doc)
        # 输入操作
        logging.info("{0} 往 {1}输入元素".format(doc, locator))
        try:
            ele.send_keys(text)
        except:
            logging.exception("元素输入操作失败!!!")
            # 截图
            self.save_screenshot(doc)
            raise

    #获取元素的文本内容
    def get_text(self,locator,doc=""):
        # 找元素
        ele = self.get_element(locator, doc)
        # 输入操作
        logging.info("获取{0} 的 {1}元素文本".format(doc, locator))
        try:
            text = ele.text
            logging.info("元素:{0}的文本内容为:{1}".format(locator,text))
            return text
        except:
            logging.exception("获取元素文本操作失败!!!")
            # 截图
            self.save_screenshot(doc)
            raise

    #获取元素属性
    def get_element_attribute(self,locator,attr,doc=''):
        # 找元素
        ele = self.get_element(locator, doc)
        # 输入操作
        logging.info("获取{0} 的 {1}元素的{2}属性".format(doc, locator,attr))
        try:
            ele_attr = ele.get_attribute(attr)
            logging.info("元素:{0}的文本内容为:{1}".format(locator, ele_attr))
            return ele_attr
        except:
            logging.exception("获取元素属性操作失败!!!")
            # 截图
            self.save_screenshot(doc)
            raise

    #元素存在为true,不存在为false
    def is_eleExist(self,locator,timeout=10,doc=''):
        logging.info("在页面{0}中是否存在元素:{1}".format(doc,locator))
        try:
            WebDriverWait(self.driver,timeout).until(EC.visibility_of_element_located(locator))
            logging.info("{0}秒内页面{1}中存在的元素:{2}".format(timeout,doc,locator))
            return True
        except:
            #捕获异常到日志中
            logging.exception("{0}秒内页面{1}中不存在的元素:{2}".format(timeout,doc,locator))
            return False


    #alert处理
    def alert_action(self,action="accept"):
        pass

    #iframe切换
    def switch_iframe(self,iframe_reference):
        pass

    #上传
    def upload_file(self):
        pass

    #错误截图
    def save_screenshot(self,doc):
        #图片名称:模块名_页面名称_操作名称_年-月-日 时-分-秒.png
        file_path = dir_config.screenshot_dir + \
                    "{0}_{1}.png".format(doc,time.strftime("%Y-%m-%d-%H-%M-%S",time.localtime()))
        # 截图文件存放在Screenshot目录下
        try:
            self.driver.save_screenshot(file_path)
            logging.info("截取成功,文件路径为{}".format(file_path))
        except:
            logging.exception("截图失败")


    #滚动条处理
    #窗口切换从

文件路径dir_config

import os
#框架项目顶层目录

base_dir = os.path.split(os.path.split(os.path.abspath(__file__))[0])[0]

testdatas_dir = os.path.join(base_dir,"TestDatas")

testcases_dir = os.path.join(base_dir,"TestCases")

htmlreport_dir = os.path.join(base_dir,"Outputs/reports")

logs_dir = os.path.join(base_dir,"Outputs/logs")

#config_dir = os.path.join(base_dir,"Config")

screenshot_dir = os.path.join(base_dir,"Outputs/screenshots")

你可能感兴趣的:(公共的-Common目录)