zoukankan      html  css  js  c++  java
  • pytest 结合selenium 运用案例

    登录案例

    所属模块:login,  用例编号:C001001,  前置条件:系统中存在账号, 

    测试步骤:不输入管理员账号 只输入密码,点击登陆

    预期结果:提示信息为:用户名不能为空

     测试结果:通过。

    运行环境 pytest selenium 

    用例代码 pytest -s 执行:

    import pytest
    from selenium import webdriver
    import time

    class Test_错误登录:

    def test_C001001(self):

    print(' 用例 C001001: 不输入账号登录')

    # 实例化浏览器 如果为空就是是用的项目根目录的Chrome驱动
    borwser = webdriver.Chrome()
    # 请求网址
    borwser.get('http://test.lemonban.com/ningmengban/app/login/login.html')
    # 隐式等待 每隔半秒请求
    borwser.implicitly_wait(10)
    # 窗口放大
    borwser.maximize_window()
    # 点击密码框
    borwser.find_element_by_id('password').click()
    borwser.find_element_by_id('password').send_keys('zzc222736')
    time.sleep(2)
    # 点击登陆
    borwser.find_element_by_id('login-button').click()
    time.sleep(2)
    tes = borwser.find_element_by_xpath('//*[@id="myform"]/div[4]/p').text

    print(tes)
    assert tes == '用户名不能为空。'

    多条用例

    用例2

    所属模块:login,  用例编号:C001001,  前置条件:系统中存在账号, 

    测试步骤:不输入管理员账号 只输入密码,点击登陆

    预期结果:提示信息为:密码不能为空。

     只可在上一个登陆类下面添加方法即可

    如果不用执行前面的测试用例 可以指定用例执行:pytest -k 用例函数名或者包含的数值

    例如:pytest -s -k 002


    def test_C001002(self):
    print(' 用例 C001002: 正确的账号不输入密码')

    # 实例化浏览器 如果为空就是是用的项目根目录的Chrome驱动
    borwser = webdriver.Chrome()
    # 请求网址
    borwser.get('http://test.lemonban.com/ningmengban/app/login/login.html')
    # 隐式等待 每隔半秒请求
    borwser.implicitly_wait(10)
    # 窗口放大
    borwser.maximize_window()
    # 点击账号框
    borwser.find_element_by_id('username').click()
    borwser.find_element_by_id('username').send_keys('13409222222')
    time.sleep(2)
    # 点击登陆
    borwser.find_element_by_id('login-button').click()
    time.sleep(2)
    tes = borwser.find_element_by_xpath('//*[@id="myform"]/div[4]/p').text

    print(tes)
    assert tes == '密码不能为空。'

    验证alert弹框内容

    定位内容方法: .switch_to.alert.text

    点击确定方法:.accept()

    点击取消方法:.dismiss() 

    弹窗输入方法:.send_keys(keysToSend)

     执行用例 pytest -s -k 003:

    def test_C001003(self):
    print(' 用例 C001003: 错误的账号正确的密码')

    # 实例化浏览器 如果为空就是是用的项目根目录的Chrome驱动
    borwser = webdriver.Chrome()
    # 请求网址
    borwser.get('http://test.lemonban.com/ningmengban/app/login/login.html')
    # 隐式等待 每隔半秒请求
    borwser.implicitly_wait(10)
    # 窗口放大
    borwser.maximize_window()
    # 点击账号框
    borwser.find_element_by_id('username').click()
    borwser.find_element_by_id('username').send_keys('13409222222')
    borwser.find_element_by_id('password').click()
    borwser.find_element_by_id('password').send_keys('zzc222736')
    time.sleep(2)
    # 点击登陆
    borwser.find_element_by_id('login-button').click()
    time.sleep(2)
    alertText = borwser.switch_to.alert.text
    print(alertText+'+打印效果')
    assert alertText == '该手机号没有注册'

    封装调用重复代码 减去代码量

    有时候有些用例会出现大量的重复 比如说有许多用例需要登录

    不可能每条用例都写一遍登录逻辑,或者网页源码出现改动那么我就需要修改自动化代码

    所以为了减去代码量可以使用封装调用重复的代码

    可以在自动化项目中创建一个目录专门存放重复代码,以用来调用。

     写完公共逻辑代码 就可以到自动化文件中引入过来 进行传值

     公共逻辑代码文件 进行接收 

    from selenium import webdriver

    def loginAndCheck(username,password):

    # 实例化浏览器 如果为空就是是用的项目根目录的Chrome驱动
    borwser = webdriver.Chrome()
    # 请求网址
    borwser.get('http://test.lemonban.com/ningmengban/app/login/login.html')
    # 隐式等待 每隔半秒请求
    borwser.implicitly_wait(10)
    # 窗口放大
    borwser.maximize_window()
    # 对传过来的值进行判断,如果有值就进行引用

    if username is not None:
    borwser.find_element_by_id('username').click()
    borwser.find_element_by_id('username').send_keys(username)

    if password is not None:
    borwser.find_element_by_id('password').click()
    borwser.find_element_by_id('password').send_keys(password)

    # 点击登陆
    borwser.find_element_by_id('login-button').click()

    alertText = borwser.switch_to.alert.text
    print(alertText + '+打印效果')

    # 执行完毕退出
    borwser.quit()

    # 返回弹框值
    return alertText

    接下来 自动化脚本就可以得到简化

    # 引入公共逻辑代码的脚本
    from lib.webui import loginAndCheck

    class Test_错误登录:

    def test_C001003(self):
    print(' 用例 C001003: 错误的账号正确的密码')

    # 对返回值进行接收 并传值
    alertText = loginAndCheck(None,'88888888')
    # 对返回值进行判断
    assert alertText == '该手机号没有注册'

    注意!!! 然后运行的时候 路径是在自动化脚本的路径程序是找不到你的公共逻辑脚本的路径的 

    所以:要cd到涵盖了 lib目录和 自动化脚本的目录里去 以模块去运行:python -m pytest cases -sv

    目录结构:

  • 相关阅读:
    【题解】洛谷 P3942 将军令【20201017 CSP 模拟赛】【贪心】
    ASP.NET上传文件的三种基本方法
    Android 最火的快速开发框架XUtils
    asp.net 上传文件到一般处理程序中
    Android版本:使用findViewById()用字符串/在一个循环
    android 调用系统图库查看指定路径的图片
    Android中实现日期时间选择器(DatePicker和TimePicker)
    Android自定义ListView的Item无法响应OnItemClick的解决办法
    Android开发配置,消除SDK更新时的“https://dl-ssl.google.com refused”异常
    mysql 修改密码
  • 原文地址:https://www.cnblogs.com/sunzzc/p/13341031.html
Copyright © 2011-2022 走看看