随笔备忘记录-UI自动化测试-操作配置文件、封装公共类

随便写点东西,有的是网上借鉴,有的是自己体会,总之都是根据自己的需求进行优化的一些东西,随笔备忘录
python3配置文件的增删改查等操作可以使用内置的ConfigParser模块,需要一个配置文件去控制一些环境信息,比如测试地址,用户信息,保存测试过程中的一些值,方便后续测试用例的调用,配置文件可以是txt/xml/ini,Python的话一般用ini文件
在项目下新建Config文件夹,文件夹下新建config.ini文件
在这里插入图片描述
config.ini文件如下

[environment]
browser = 0

[password]
pw = 666666

[name]
cfgw = wendezhu
cfzjl = xigangwu
xtjl = jmwan

[wms]
url = http://192.168.0.33:8090/login

[tcmp]
url = http://192.168.0.16:8088/tcmp/

[ta]
url = http://192.168.0.17:7002/trustWeb/login.jsp

[ment]


environment是配置一些开关,browser用来配置浏览器,这里设定0是谷歌浏览器,1是火狐浏览器,2是IE浏览器(这里是用chrome)
password存放登录所需的密码
name存放不同用户登录所需的用户名
wms、tcmp、ta存放对应系统的url及其他信息
ment存放测试过程中需要保存的数据信息

接下来进行具体的实现。在framework文件夹下,新建Base_Page.py文件,并添加全局变量,为了提供配置文件的路径

path = getcwd.get_cwd()
config_path = os.path.join(path, 'Config/config.ini')
config = configparser.ConfigParser()
config.read(config_path, encoding="utf-8-sig")

Base_Page.py文件代码如下

# -*- encoding: utf-8 -*-

from Logs.log import log1
from selenium.common.exceptions import NoSuchElementException
import getcwd
import os
import time
import configparser
from selenium import webdriver

path = getcwd.get_cwd()
config_path = os.path.join(path, 'Config/config.ini')
config = configparser.ConfigParser()
config.read(config_path, encoding="utf-8-sig")


class BasePage:

    """测试基类"""

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

    def config_get(self, key, section):
    	'''读取配置文件值'''
        config_get = config.get(section, key)
        return config_get

    def config_write(self, section, key=None, value=None):
        '''往配置文件写入键值'''
        if key is not None and value is not None:
            config.set(section, key, value)
            log1.info('在section:%s下写入%s=%s' % (section, key, value))
            with open(config_path, 'w', encoding='utf-8')as f:
                config.write(f)
        else:
            config.add_section(section)
            log1.info('新增section:%s' % section)
            with open(config_path, 'w', encoding='utf-8')as f:
                config.write(f)


    def config_delete(self, section, key=None):
        '''删除配置文件字段'''
        if key is not None:
            config.remove_option(section, key)
            log1.info('删除section:%s下key为:%s的记录' % (section, key))
            with open(config_path, 'w', encoding='utf-8')as f:
                config.write(f)
        else:
            config.remove_section(section)
            log1.info('删除section:%s' % section)
            with open(config_path, 'w', encoding='utf-8')as f:
                config.write(f)

    def open_browser(self,value):
        browser = self.config_get('browser', 'environment')
        log1.info('读取浏览器配置')
        url = self.config_get('url',value)
        log1.info('读取url:%s' % url)
        try:
            if browser == str(0):
                self.driver = webdriver.Chrome()
                log1.info('打开的浏览器为chrome')
            elif browser == str(1):
                self.driver = webdriver.Firefox()
                log1.info('打开的浏览器为Firefox')
            elif browser == str(2):
                self.driver = webdriver.Ie()
            self.driver.get(url)
            self.driver.maximize_window()
            log1.info('浏览器最大化')
            self.driver.implicitly_wait(10)
            log1.info('设置静态等待时间10秒')
            return self.driver
        except BaseException:
            log1.error('浏览器打开报错')

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


    @staticmethod
    def isdisplayed(element):
        """元素是否存在"""
        value = element.is_displayed()
        return value

    @staticmethod
    def my_sleep(secondes):
        """强制等待"""
        time.sleep(secondes)
        log1.info('暂停%d秒' % secondes)

    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'  # 拼接截图文件名
        # noinspection PyBroadException
        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 in ['id', 'name', 'class', 'tag', 'link', 'plink', 'css', 'xpath']:
            # noinspection PyBroadException
            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('清空输入内容')
        # noinspection PyBroadException
        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)
        # noinspection PyBroadException
        try:
            element.click()
            log1.info('点击元素成功')
        except BaseException:
            display = self.isdisplayed(element)
            if display is True:
                self.my_sleep(3)
                element.click()
                log1.info('点击元素成功')
            else:
                self.get_img()
                log1.error('点击元素报错', exc_info=1)

    def use_js(self, js):
        """调用js"""
        # noinspection PyBroadException
        try:
            self.driver.execute_script(js)
            log1.info('js执行成功,js内容为:%s' % js)
        except BaseException:
            log1.error('js执行报错', exc_info=1)

    def switch_iframe(self, selector):
        """切换farm"""
        element = self.find_element(selector)
        # noinspection PyBroadException
        try:
            self.driver.switch_to.frame(element)
            log1.info('切换frame成功')
        except BaseException:
            log1.error('切换frame报错', exc_info=1)

    def switch_out(self):
        """跳出iframe"""
        self.driver.switch_to.default_content()
        log1.info('跳出iframe成功')

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值