pytest+yaml数据驱动简易框架(web UI自动化测试)

本文介绍了如何通过web_keys.py模块封装SeleniumWebDriver的方法,以简化测试用例编写。使用pytest和test_cases中的yaml文件,实现了对Chrome浏览器的配置和登录功能的自动化测试。
摘要由CSDN通过智能技术生成

目录结构

1、web_keys:创建web_keys.py,对webdriver的相关操作进行二次封装

2、test_cases:存放测试用例

3、data:测试yaml文件

4、conf:options.py用于配置chrome浏览器的相关设置

web_keys.py:

'''
    关键字驱动,通过对webdriver的相关方法进行二次封装
'''

from selenium import webdriver
import time

from pytest_autotest.conf import options


def open_browser(type_):
    try:
        driver = getattr(webdriver, type_.capitalize())(options=options.ops())
    except:
        driver = webdriver.Chrome()
    return driver


class WebKey:
    def __init__(self, type_):
        self.driver = open_browser(type_)
        # self.driver.implicitly_wait(5)

    # 打开对应url
    def open_url(self, url):
        self.driver.get(url)

    # 定位元素
    def located(self, by, value):
        return self.driver.find_element(by, value)

    # 点击操作
    def click(self, by, value):
        return self.located(by, value).click()

    # 定位元素后输入内容
    def input(self, by, value, content):
        return self.located(by, value).send_keys(content)

    def wait_time(self, sec):
        time.sleep(sec)

    # 关闭原先标签进行句柄切换
    def switch_window(self):
        handles = self.driver.window_handles
        self.driver.close()
        self.driver.switch_to.window(handles[1])

    # 不关闭原标签进行句柄切换
    def switch_window_noclose(self):
        handles = self.driver.window_handles
        self.driver.switch_to.window(handles[1])

    # 断言
    def assert_(self, by, value, expected):
        try:
            # 实际结果
            reality = self.located(by, value).text
            # 断言实际结果与预期结果
            assert reality in expected, '断言失败,实际结果为{},预期结果为{}'.format(reality, expected)
        except:
            raise

options.py:

'''
    options类 chrome浏览器配置
'''
import time

from selenium import webdriver


def ops():
    options = webdriver.ChromeOptions()

    # 设置加载策略
    options.page_load_strategy = 'normal'

    # 设置浏览器尺寸大小
    options.add_argument('start-maximized')

    # 设置去掉自动化小黄条
    options.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])

    #  去掉账号密码保存,当首次登录时候浏览器可能会提醒用户要不要保存用户信息的弹窗
    prefs = {
        'credentials_enable_service': False,
        'profile.password_manger_enable': False
    }
    options.add_experimental_option('prefs', prefs)

    # 取出控制台多余信息方式二
    options.add_argument('--log_level=3')
    options.add_argument('--disable-gpu')
    options.add_argument('--ignore-certificate-errors')
    return options

test_webkeys.py:

import pytest
import yaml

from pytest_autotest.web_keys import web_keys

'''
    登录
'''


@pytest.mark.parametrize('data',
                         yaml.load(stream=open('../data/login.yaml', 'r', encoding='utf-8'), Loader=yaml.FullLoader))
def test_login(data):
    # 创建浏览器对象
    wk = web_keys.WebKey(data['type_'])
    # 访问对应网址
    wk.open_url(data['url'])
    # 登录
    wk.click(**data['click_login'])
    # 输入账号
    wk.input(**data['user'])
    # 输入密码
    wk.input(**data['pwd'])

    # 点击登录
    wk.click(**data['submit'])
    wk.wait_time(data['wait'])
    wk.assert_(**data['verify'])


if __name__ == '__main__':
    pytest.main(['-s'])

login.yaml

-
  type_: chrome
  url: https://wanandroid.com/index
  click_login:
    by: xpath
    value: //*[@class="loginNav"]/li
  user:
    by: xpath
    value: //input[@class="normal_input"][1]
    content: 你的账号
  pwd:
    by: xpath
    value: //input[@class="normal_input"][2]
    content: 你的密码
  submit:
    by: xpath
    value: //span[@class="btn save" and text()="登录"]
  wait: 5
  verify:
    by: xpath
    value: //span[@class="account"]/a[text()="oudolntea@gmail.com"]
    expected: oudolntea@gmail.com

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值