关键字驱动实现web自动化

接口自动化测试步骤几乎是一样的,可以用excel写测试用例,通过ddt实现数据驱动,而web自动化不符合测试步骤一致的要求,用ddt实现数据驱动并不理想,这时候可以使用关键字驱动实现web自动化。

一、封装浏览器操作

browser.py,我放在了common包下面

import allure
from selenium.webdriver import Chrome
from selenium.webdriver import ActionChains, Keys

class Browser:
    def __init__(self,driver:Chrome):
        self.driver = driver
        self.action = ActionChains(driver)

    def visit(self,url):
        """访问网页"""
        self.driver.get(url)

    def click(self,locator):
        """浏览器点击"""
        el = self.get_element(locator)
        el.click()

    def send_keys(self,locator,text):
        """ 在输入框中输入信息"""
        el = self.get_element(locator)
        el.send_keys(text)

    def get_element(self,locator):
        """查找元素"""
        try:
            return self.driver.find_element(*locator)
        except Exception as e:
            self.attach_screenshot("没有找到元素")
            raise e

    def attach_screenshot(self,pic_name="截图"):
        """截图"""
        png = self.driver.get_screenshot_as_png()
        allure.attach(png,name=pic_name,attachment_type=allure.attachment_type.PNG)

    def press_enter(self):
        """回车"""
        self.action.send_keys(Keys.ENTER).perform()

二、创建浏览器对象

conftest.py,创建夹具,把浏览器对象放进去

import pytest
from selenium import webdriver
from selenium.webdriver.chromium.options import ChromiumOptions
@pytest.fixture()
def browser():
    """创建一个浏览器对象"""
    option = ChromiumOptions()
    option.page_load_strategy = 'eager'  # 设置浏览器的属性,不等所有的元素页面加载完成
    driver = webdriver.Chrome(options=option)
    driver.implicitly_wait(8)
    driver.maximize_window()

    yield driver

    driver.quit()

三、用yaml文件写测试用例

一个用例一个yaml文件(里面可以写列表和字典,使用数据很方便)login_baidu.yaml,我用的百度登录

-
  action : visit
  input :
    url : "https://www.baidu.com/"

-
  action: click
  input:
    locator:
      ['xpath','(//a[@name="tj_login"])[2]']
-
  action: send_keys
  input:
    locator:
      ['xpath','//input[@placeholder="手机号/用户名/邮箱"]']
    text : "15988889999"
-
  action : send_keys
  input :
    locator : ['xpath','//input[@placeholder="密码"]']
    text : "123"
-
  action : press_enter
  input :

四、创建方法提取yaml测试数据,调用封装的浏览器方法执行

keywords_fun.py,我放在了cases包下面

import yaml
from common.browser import Browser


def read_yaml(file):
    with open(file,encoding='utf-8') as cases:
        data = yaml.safe_load(cases)
    return data


def keywords(browser,file):
    """关键字测试用例"""
    b = Browser(browser)
    steps = read_yaml(file)
    for step in steps:
        method = getattr(b,step["action"]) #方法是类的属性,通过获取属性的方式获取方法
        if step["input"]:
            method(**step["input"])   #调用方法,用**解字典包获取参数
        else:
            method()

 五、执行测试用例

导入keywords_fun.py中的keywords方法,将编写的yaml文件和浏览器对象(之前创建的夹具)传入,点击执行

from cases.keywords_fun import keywords

def test_login(browser):
    keywords(browser=browser,file="login_baidu.yaml")

总结:

1、以上代码可以实现百度网页登录

2、注意点:浏览器操作封装,pytest夹具的创建,根据yaml文件中的action字段调用浏览器方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值