python3+selenium框架设计04-封装测试基类

在完成了日志类封装之后,那我们就要对测试基类进行实现,在其中对一些请求再次封装,在项目下新建一个framework文件夹,在文件夹下新建Base_Page.py文件,这是用来写测试基类的文件。在项目下新建screenshots文件件,用来存放截图。项目结构如下。

具体怎么封装还是要看被测试需要什么,只能提供一个大致思路,我项目能用的封装,你项目并不一定能用

测试基类的思路就是把所有能公用的方法全部封装,并加上日志输出。报错截图等。

看下Base_Page.py下具体代码

from Logs.log import log1
from selenium.common.exceptions import NoSuchElementException
import getcwd
import os
import time
class BasePage():
    '''测试基类'''
    def __init__(self,driver):
        self.driver = driver


    def get_img(self):
        '''截图'''
        path = os.path.join(getcwd.get_cwd(),'screenshots/')#拼接截图保存路径
        rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))#按格式获取当前时间
        screen_name = path + rq + '.png'#拼接截图文件名
        try:
            self.driver.get_screenshot_as_file(screen_name)
            log1.info("截图保存成功")
        except BaseException:
            log1.error("截图失败",exc_info = 1)

    def find_element(self,selector):
        '''定位元素'''
        by = selector[0]
        value = selector[1]
        element = None
        if by =='id' or by =='name' or by == 'class' or by == 'tag' or by =='link' or by =='plink' or by =='css' or by == 'xpath':
            try:
                if by == 'id':
                    element = self.driver.find_element_by_id(value)
                elif by == 'name':
                    element = self.driver.find_element_by_name(value)
                elif by == 'class':
                    element = self.driver.find_element_by_class_name(value)
                elif by == 'tag':
                    element = self.driver.find_element_by_tag_name(value)
                elif by == 'link':
                    element = self.driver.find_element_by_link_text(value)
                elif by == 'plink':
                    element = self.driver.find_element_by_partial_link_text(value)
                elif by == 'css':
                    element = self.driver.find_element_by_css_selector(value)
                elif by == 'xpath':
                    element = self.driver.find_element_by_xpath(value)
                else:
                    log1.error('没有找到元素')
                log1.info('元素定位成功。定位方式:%s,使用的值%s:' % (by,value))
                return element
            except NoSuchElementException:
                log1.error("报错信息:",exc_info = 1)
                self.get_img()#调用截图
        else:
            log1.error('输入的元素定位方式错误')


    def type(self,selector,value):
        '''输入内容'''
        element=self.find_element(selector)
        element.clear()
        log1.info('清空输入内容')
        try:
            element.send_keys(value)
            log1.info('输入的内容:%s' % value)
        except BaseException:
            log1.error('内容输入报错',exc_info = 1)
            self.get_img()


    def click(self,selector):
        '''点击元素'''
        element = self.find_element(selector)
        try:
            element.click()
            log1.info('点击元素成功')
        except BaseException:
            log1.error('点击元素报错',exc_info = 1)
            self.get_img()


    def sleep(self,secondes):
        '''强制暂停'''
        time.sleep(secondes)
        log1.info('暂停%d秒' % secondes)


    def get_title(self):
        '''获取title'''
        title = self.driver.title
        log1.info('当前窗口的title是:%s' % title)
        return  title

    def quit(self):
        self.driver.quit()
        log1.info('关闭浏览器')

只写了一部分,提供一个思路,还有很多方法可以继续封装来完善框架,比如多菜单的切换,窗口切换等。

接下来测试一下封装的代码

在test_base.py写如下代码并运行

from selenium import webdriver
from framework.Base_Page import BasePage
dr = webdriver.Firefox()
dr.get('https:www.baidu.com')
s = dr.window_handles
driver = BasePage(dr)
kw = ['id','kw']
driver.type(kw,'selenium+python')
driver.sleep(3)
driver.type(kw,'selenium')
su = ['id','su']
driver.click(su)
driver.get_img()
driver.sleep(2)
driver.get_title()

猜你喜欢

转载自blog.csdn.net/a54288447/article/details/81385258
今日推荐