关键字封装

Posted minghong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关键字封装相关的知识,希望对你有一定的参考价值。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Name: basepage
# Author: 简
# Time: 2019/6/18

from app_framework.Common import log

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

import datetime
import time

from app_framework.Common.contants import screenshot_dir
logger=log.get_logger(__name__)

class BasePage:

    # 包含了PageObjects当中,用到所有的selenium底层方法。
    # 还可以包含通用的一些元素操作,如alert,iframe,windows...
    # 还可以自己额外封装一些web相关的断言
    # 实现日志记录、实现失败截图

    def __init__(self,driver):
        self.driver = driver

    def wait_eleVisible(self,loc,img_doc="",timeout=30,frequency=0.5):
        logger.info("等待元素  可见。".format(loc))
        try:
            # 起始等待的时间 datetime
            start = datetime.datetime.now()
            WebDriverWait(self.driver,timeout,frequency).until(EC.visibility_of_element_located(loc))
            # 结束等待的时间
            end = datetime.datetime.now()
            logger.info("开始等待时间点:,结束等待时间点:,等待时长为:".
                format(start,end,end-start))
        except:
            # 日志
            logger.exception("等待元素可见失败:")
            # 截图 - 哪一个页面哪一个操作导致的失败。+ 当前时间
            self.save_web_screenshot(img_doc)
            raise
    #获取toast等待用
    def wait_elePresence(self,loc,img_doc="",timeout=30,frequency=0.5):
        logger.info("等待元素  可见。".format(loc))
        try:
            # 起始等待的时间 datetime
            start = datetime.datetime.now()
            WebDriverWait(self.driver,timeout,frequency).until(EC.presence_of_element_located(loc))
            # 结束等待的时间
            end = datetime.datetime.now()
            logger.info("开始等待时间点:,结束等待时间点:,等待时长为:".
                format(start,end,end-start))
        except:
            # 日志
            logger.exception("等待元素可见失败:")
            # 截图 - 哪一个页面哪一个操作导致的失败。+ 当前时间
            self.save_web_screenshot(img_doc)
            raise

    # 查找一个元素
    def get_element(self,loc,img_doc=""):
        """
        :param loc: 元素定位。以元组的形式。(定位类型、定位时间)
        :param img_doc: 截图的说明。例如:登陆页面_输入用户名
        :return: WebElement对象。
        """
        logger.info("查找  中的元素  ".format(img_doc,loc))
        try:
            ele = self.driver.find_element(*loc)
            return ele
        except:
            # 日志
            logger.exception("查找元素失败")
            # 截图
            self.save_web_screenshot(img_doc)
            raise

    def click_element(self,loc,img_doc,timeout=30,frequency=0.5):
        """
        实现了,等待元素可见,找元素,然后再去点击元素。
        :param loc:
        :param img_doc:
        :return:
        """
        # 1、等待元素可见
        self.wait_eleVisible(loc,img_doc,timeout,frequency)
        # 2、找元素
        ele = self.get_element(loc,img_doc)
        # 3、再操作
        logger.info(" 点击元素 ".format(loc))
        try:
            ele.click()
        except:
            # 日志
            logger.exception("点击元素失败")
            # 截图
            self.save_web_screenshot(img_doc)
            raise

    # 文本输入
    def input_text(self,loc,img_doc,*args):
        # 1、等待元素可见
        self.wait_eleVisible(loc,img_doc)
        # 2、找元素
        ele = self.get_element(loc,img_doc)
        # 3、再操作
        logger.info(" 给元素  输入文本内容:".format(loc,args))
        try:
            ele.send_keys(*args)
        except:
            # 日志
            logger.exception("元素输入操作失败")
            # 截图
            self.save_web_screenshot(img_doc)
            raise

    # 获取元素的属性值
    def get_element_attribute(self,loc,attr_name,img_doc,timeout=30,frequency=0.5):
        # 等待元素存在 、sleep(1)
        self.wait_elePresence(loc,img_doc,timeout,frequency)
        # time.sleep(0.1)
        # 获取元素
        ele = self.get_element(loc,img_doc)
        # 获取属性
        try:
            attr_value =  ele.get_attribute(attr_name)
            logger.info("获取元素  的属性  值为:".format(loc, attr_name,attr_value))
            return attr_value
        except:
            # 日志
            logger.exception("获取元素属性失败")
            # 截图
            self.save_web_screenshot(img_doc)
            raise

    # 获取元素的文本值。
    def get_element_text(self,loc,img_doc,timeout=30,frequency=0.5):
        # 等待元素存在 、sleep(1)
        self.wait_elePresence(loc, img_doc, timeout, frequency)
        ele = self.get_element(loc, img_doc)
        # 获取属性
        try:
            text = ele.text
            logger.info("获取元素  的文件值为:".format(loc, text))
            return text
        except:
            # 日志
            logger.exception("获取元素文本值失败")
            # 截图
            self.save_web_screenshot(img_doc)
            raise


    # 实现网页截图操作
    def save_web_screenshot(self,img_doc):
        #  页面_功能_时间.png
        now = time.strftime("%Y-%m-%d %H_%M_%S")
        filepath = "_.png".format(img_doc,now)
        try:
            self.driver.save_screenshot(screenshot_dir +"/" + filepath)
            logger.info("网页截图成功。图片存储在:".format(screenshot_dir +"/" + filepath))
        except:
            logger.exception("网页截屏失败!")
    #切换app
    def check_app(self,appPackage=None,appActivity=None):
        self.driver.start_activity(appPackage,appActivity)

# 获取窗口的大小
    def get_window(self):
        size = self.driver.get_window_size()
        logger.info("获取窗口大小成功")
        return size

# 上下左右滑动 - up  down  left right
    def swipe(self,fangxiang=None,):
        size=self.get_window()
        self.fangxiang=fangxiang
        if fangxiang ==up: #从下往上
            self.driver.swipe(size["width"] * 0.9, size["height"] * 0.5, size["width"] * 0.1, size["height"] * 0.1)
            logger.info(往上滑动)
        elif fangxiang ==down:#从上往下
            self.driver.swipe(size["width"] * 0.9, size["height"] * 0.1, size["width"] * 0.1, size["height"] * 0.5)
            logger.info(往下滑动)
        elif fangxiang ==left:#从右往左
            logger.info(往左滑动)
            self.driver.swipe(size["width"]*0.9,size["height"]*0.5,size["width"]*0.1,size["height"]*0.5)
        else:#从左往右
            logger.info(往右滑动)
            self.driver.swipe(size["width"]*0.1,size["height"]*0.5,size["width"]*0.9,size["height"]*0.5)
    # toast获取
    def get_toast(self,loc,img_doc,timeout=30,frequency=0.5):
        try:
            self.wait_elePresence(loc,img_doc,timeout,frequency)
            logger.info(toast提示是,.format(self.driver.find_element_by_xpath(loc).text))
            return self.driver.find_element_by_xpath(loc).text
        except:
                logger.exception("没有获取 到toast信息!")
                self.save_web_screenshot(img_doc)

# 切换到webview - context
# 获取当前的contexts

# 获取元素的大小和位置

if __name__ == __main__:
    BasePage(driver=1).swipe(fangxiang=up)

 

以上是关于关键字封装的主要内容,如果未能解决你的问题,请参考以下文章

Java类的封装——关键字private

关键字封装

串口通信封装 - 一定时间内等待关键字

java中面向对象的三大特性:封装继承多态和关键字instanceof

05-封装多态和继承

构造,关键字,代码块,封装。