web自动化测试常用操作&封装

       web自动化测试,其实就是通过代码,模拟手工测试,进行的常规操作,从而达到解放劳动力、提高效率、节省成本,那么当我们用例多了,进行的操作多了,有什么办法可以提高效率呢,接下来就介绍下web的一些常用封装和操作。


一、前置条件

        基于pytest测试框架的特性,前置条件可以怎么设置呢?我们可以通过把前置条件的部分代码,放置在一个叫 conftest.py 的文件中,如下:


from pages.pages_02_login import LoginPage
from selenium import webdriver
import pytest

# 启动浏览器的前置条件
@pytest.fixture()
def get_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.maximize_window()
    yield driver
    driver.quit()

# 登录的前置条件
@pytest.fixture()
def teacher_login():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.maximize_window()
    driver.get('https://xxxxxx.html')
    login_page = LoginPage(driver)
    login_page.login('lx@com','123456')
    yield driver
    driver.quit()

我们每次调用前置条件时,直接传入夹具函数名即可;

class TestCreatCourse:

# 调用login的前置条件

    def test_close_creat_course(self,teacher_login):

        driver = teacher_login
        create_course = Create_classPage(driver)
        create_course.loading().click_add_or_create_class().click_create_class().click_close()   #点击创建/加入课程,点击创建课程
        avatar_elem = create_course.find_element(create_course.actovar_locator)
        try:
            time.sleep(1)
            assert avatar_elem.get_attribute('title') == 'xxx'
        except AssertionError as e:
            logger.error('测试用例不通过'.format(e))
            raise e




class TestLogin:

    # 调用get_driver的前置条件

    def test_without_username_and_password(self,get_driver):
        driver = get_driver
        login_pages = LoginPage(driver)
        login_pages.loading().login('','')
        try:
            actual = ['账号不能为空','密码不能为空']
            assert login_pages.get_error_msgs() == actual
        except AssertionError as e:
            login_pages.screenshot()
            logger.error('测试用例不通过:{}'.format(e))
            raise e
另外:自动化测试优化流程
1、启动浏览器,条件反射天骄一隐形等待   ==>   driver.implicity_wait(10)
2、最大化窗口,  ==>  driver.maximize_window()
3、PO模式:(下面详细描述)
 - 把每一页的操作都封装成方法,(如登录、点击、获取文本等操作)
 - 页面 url 优化成属性(url、__init__中的driver)
 - 尽量让方法的返回值,返回一个pageobject对象,可为self,,也可为其他对象,(方便链式调用)

二、PO模式

== PO模式:(Page Object Model)PMO
把一个页面转化为对象,然后可通过调用,直接执行操作:
page.login() ==>
  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值