码迷,mamicode.com
首页 > 其他好文 > 详细

selenium的po模式

时间:2020-10-10 17:35:22      阅读:20      评论:0      收藏:0      [点我收藏+]

标签:间隔   format   image   多个   操作   visible   bim   class   自动化   

引子:

  最近面试被问到了UI自动化,好久没做了,今天回来复习下,发现目前流行一种po模式,整体来说非常像django的MTV模式,有的分2层有的分3层,根据自己项目的需要都是可以的。

      思路:

    1 将selenium各种常用的元素定位方法以及对元素的操作2次封装,组成公共组件库,base_page

    2 将每一个页面都作为一个单独的page_class(当然可以写在一个文件中,也可以分开写),主要维护web也中的元素集,以及每一步的操作

    3 测试用例依赖第二步的page_class,在该层可以配合pytest or unittest等测试框架

    以上是核心的部分,还可以将日志,测试报告模块一块集成进来

实现:

  base_page

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


class basepage():
    def __init__(self,driver,url):
        ‘‘‘
        初始化浏览器
        ‘‘‘
        self.driver=driver
        self.driver.get(url)
        self.driver.maximize_window()

    def wait_element_visible(self,loc,timeout=20,poll_frequency=0.5,model=None):
        ‘‘‘

        :param loc: 元组,元素定位表达式,表达方式(元素定位类型,元素定位方法)
        :param timeout: 等待超时时间
        :param poll_frequency: 页面轮训间隔(频率)
        :param model: 时间超时时,截图操作
        :return:
        ‘‘‘
        try:
            start_time=time.time()
            WebDriverWait(self.driver,timeout,poll_frequency).until(EC.visibility_of_element_located(*loc))
            end_time=time.time()-start_time
        except:

            raise "没有找到元素-->{}".format(loc)

    def wait_element_novisible(self, loc, timeout=20, poll_frequency=0.5, model=None):
        ‘‘‘

        :param loc: 元组,元素定位表达式,表达方式(元素定位类型,元素定位方法)
        :param timeout: 等待超时时间
        :param poll_frequency: 页面轮训间隔(频率)
        :param model: 时间超时时,截图操作
        :return:
        ‘‘‘

        try:
            start_time = time.time()
            WebDriverWait(self.driver, timeout, poll_frequency).until(EC.visibility_of_element_located(*loc))
            end_time = time.time() - start_time
        except:
            raise "没有找到元素-->{}".format(loc)
    def find_Element(self,loc):
        ‘‘‘

        :param loc:
        :return:
        ‘‘‘
        try:
            WebDriverWait(self.driver,10).until(EC.invisibility_of_element_located(loc))
            return self.driver.find_element(*loc)
        except:
            raise "find_Element没有找到元素-->{}".format(loc)

    def find_Elements(self,loc):
        ‘‘‘
        查找多个
        :param loc:
        :return:
        ‘‘‘
        try:
            WebDriverWait(self.driver, 10).until(EC.invisibility_of_element_located(loc))
            return self.driver.find_element(*loc)
        except:
            raise "find_Elements没有找到元素-->{}".format(loc)

    def exe_script(self,ex_script):
        ‘‘‘

        :param ex_script: 待执行的脚本
        :return:
        ‘‘‘
        self.driver.excute_script(ex_script)
    def send_keys(self,loc,value,clear_first=True,click_first=True):
        ‘‘‘
        填写和清除
        :param loc:
        :param value:
        :param clear_first:
        :param click_first:
        :return:
        ‘‘‘
        try:
            loc=getattr(self,"_%s"%loc)
            if click_first:
                self.find_Element(*loc).click()
            if clear_first:
                self.find_Element(*loc).clear()
                self.find_Element(*loc).send_keys(value)
        except AttributeError:
            raise "send_keys没有找到元素----{}".format(loc)
    def get_ele(self,loc,):
        ‘‘‘
        获取文本内容
        :param loc:
        :param model:
        :return:
        ‘‘‘
        ele=self.find_Element(loc)
        try:
            text=ele.text
            return text
        except:
            raise ‘get_ele获取文本失败---{}‘.format(ele)
    def get_attr(self,loc):
        ‘‘‘
        获取元素属性
        :param loc:
        :return:
        ‘‘‘
        ele = self.find_Element(loc)
        try:
            ele_attr=ele.get_attribute()
            return ele_attr
        except:
            raise "get_attr获取属性失败---{}".format(ele)
    def save_webImgs(self,file_path):
        ‘‘‘
        截图
        :return:
        ‘‘‘
        data_now=str(datetime.datetime.now()).split(‘.‘)[0]
        #路径
        filePath=r‘{}\{}\{}.png‘.format(file_path.image_path,data_now)

  

selenium的po模式

标签:间隔   format   image   多个   操作   visible   bim   class   自动化   

原文地址:https://www.cnblogs.com/yuan-x/p/13790645.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!