pytest 结合selenium 运用案例

Posted sunzzc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

目录结构:

技术图片

 

以上是关于pytest 结合selenium 运用案例的主要内容,如果未能解决你的问题,请参考以下文章

搞一下pytest(未完成)

[Pytest+Selenium] Selenium快速入门

5W2H法运用案例~让思考更缜密

Selenium64-pytest.ini

selenium+pytest.fixture

Jenkins Selenium自动化持续集成(Linux篇)