pytest_全局变量的使用
这里重新阐述下PageObject设计模式:
PageObject设计模式是selenium自动化最成熟,最受欢迎的一种模式,这里用pytest同样适用
这里直接提供代码:

全局变量
conftest.py
"""
conftest.py 全局变量,主要实现以下功能:
1、添加命令行参数broswer, 用于切换不用浏览器
2、全局参数driver调用
""" import pytest
from selenium import webdriver def pytest_addoption(parser):
'''
添加命令行参数 --browser
''' parser.addoption(
"--browser", action="store", default="firefox", help="browser option: firefox or chrome"
) @pytest.fixture(scope='session') # 以实现多个.py跨文件使用一个session来完成多个用例
def driver(request):
'''定义全局driver参数'''
name = request.config.getoption("--browser")
if name == "firefox":
driver = webdriver.Firefox()
elif name == "chrome":
driver = webdriver.Chrome()
else:
driver = webdriver.Chrome()
print("正在启动浏览器名称: %s" % name)
# 需要登陆就调用登陆函数 def fn():
print("当全部用例执行完之后: teardown driver!")
driver.quit()
request.addfinalizer(fn)
return driver
loginpage.py
'''
作者:Caric_lee
日期:2018
'''
import time from autoTest.pytest_selenium.common.basepage import BasePage
from autoTest.pytest_selenium.common.logging import Log
from autoTest.pytest_selenium.page.mysql_python import Mysql # 获取数据库数据
mysql_test = Mysql('localhost','','root','','test')
dataAll = mysql_test.query('select * from auto_test')
username = dataAll[0]['username']
password = dataAll[0]['password']
url = dataAll[0]['url']
print("查询数据库信息 账号: %s, 密码: %s, url: %s" % (username, password, url)) class Login(BasePage):
log = Log() # 断言登录页,提示文本
hint_text_element = ('xpath', "//*[@class='crm-login1-header']/h1")
hint_text = '登录销售易'
# 断言忘记密码
forget_paw_elemet = ('xpath', "//*[text()='忘记密码?']")
forget_paw = '忘记密码'
# 断言免费注册
Free_registration_element = ('xpath', "//*[text()='免费注册']")
Free_registration_text = '免费'
# 断言'欢迎登录销售易'
tenant_interface = ('xpath', "//*[text()='欢迎登录销售易']")
tenant_interface_text = '欢迎登录'
# 元素定位
input_username_element = ('xpath', "//*[@name='loginName']")
input_paw_element = ('xpath', "//*[@placeholder='请输入密码']")
click_enter_element = ('xpath', "//*[text()='登 录']")
clikc_tenant_element = ('xpath', "//span[text()='自动化测试_0202_1109_正式' and @class='crm-company-name']") def assert_title(self):
result = self.is_text_in_element(self.hint_text_element, self.hint_text)
self.log.info("assert: 断言登录页,提示文本: %s" % result)
def assert_forget_paw(self):
result = self.is_text_in_element(self.forget_paw_elemet, self.forget_paw)
self.log.info("assert: 断言忘记密码: %s" % result)
def assert_Free_registration(self):
result = self.is_text_in_element(self.Free_registration_element, self.Free_registration_text)
self.log.info("assert: 断言免费注册: %s" % result)
def input_username(self, username):
self.send_keys(self.input_username_element, username)
def input_paw(self, paw):
self.send_keys(self.input_paw_element, paw)
def click_enter(self):
self.click(self.click_enter_element)
def assert_tenant_interface(self):
result = self.is_text_in_element(self.tenant_interface, self.tenant_interface_text)
self.log.info("assert: 欢迎登录销售易: %s" % result)
def move_scroll_end(self):
time.sleep(3)
self.js_focus_element(self.clikc_tenant_element) # 这里已经可以实现滚动了
self.log.info("聚焦滚动结束!") def click_tenant(self): # 选择租户
self.click(self.clikc_tenant_element)
self.log.info("选择租户成功!") def login(self, username=username, paw=password):
'''登录流程'''
self.assert_title() # 断言登录页,提示文本
self.assert_forget_paw() # 断言忘记密码
self.assert_Free_registration() # 断言免费注册
self.input_username(username)
self.input_paw(paw)
self.click_enter()
time.sleep(3)
self.assert_tenant_interface() # 断言'欢迎登录销售易'
print("---------------------->>>>>>>>>>>>>")
self.move_scroll_end()
self.click_tenant() if __name__=='__main__':
from selenium import webdriver
driver = webdriver.Chrome()
base = Login(driver)
driver.get(url)
driver.maximize_window()
driver.implicitly_wait(10)
base.login() # 学习备注!
# 调试某个功能的时候,就只写这个功能点的代码去调
# 加载转圈是js报错了,前端的问题,是bug (滚动条)
test_login.py
'''
作者:Caric_lee
日期:2018
'''
from autoTest.pytest_selenium.page import loginpage
from autoTest.pytest_selenium.page.loginpage import Login
import pytest, time class Test_login():
url = loginpage.url
username_data = loginpage.username
paw_data = loginpage.password
print("调用信息 账号: %s, 密码: %s, url: %s" % (username_data, paw_data, url)) @pytest.fixture(scope="function", autouse=True) # function 默认参数传递,autouse=True 自动调用fixture功能
def test_01(self, driver):
driver.get(self.url)
driver.maximize_window()
driver.implicitly_wait(10)
self.login = Login(driver) def test_02(self):
'''登录'''
# 1、断言登录页,提示文本
self.login.assert_title()
# 2、断言忘记密码
self.login.assert_forget_paw()
# 3、断言免费注册
self.login.assert_Free_registration()
# 4、输入账号
self.login.input_username(self.username_data)
# 5、输入密码
self.login.input_paw(self.paw_data)
# 6、点击登录
self.login.click_enter()
time.sleep(3)
# 7、断言'欢迎登录销售易'
self.login.assert_tenant_interface()
# 8、滚动到底部
self.login.move_scroll_end()
# 9、点击租户
self.login.click_tenant()
time.sleep(5) def test_03(self, driver):
time.sleep(5)
driver.quit() if __name__ == '__main__':
# 选择测试浏览器
pytest.main(["-s", "--browser=chrome", "test_login.py"])
这里直接指向test_login.py文件就OK了,
还可以在优化,把loginpage中的读取数据库信息,单独写个方法,放在page里面,直接读取。
数据结构还需要在调整
作者:含笑半步颠√
博客链接:https://www.cnblogs.com/lixy-88428977
声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。
pytest_全局变量的使用的更多相关文章
- cookies如何成为全局变量以及设置,删除,获取
(一)cookie机制将信息存储于用户硬盘,因此可以作为全局变量 (1)保存用户登录状态.例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就不需要重新登录了,现在很多论坛和社区都提供 ...
- php内核分析(三)-全局变量
这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linux CG CG是从全局的compiler_global中获取属性值,里面存储的就是编译过程使用到的全局变量. struct _ ...
- 全局变量:global与$GLOBALS的区别和使用
今天在写框架的时候想把SaeMySQL初始化之后作为全局变量使用.但是后来发现PHP中的全局变量和Java或者OC中的全局变量还是有较大区别的.下面记录一下php里面的global的使用相关注意事项. ...
- 针对JS经典题型对全局变量及局部变量的理解浅谈
第一次写博,还蛮激动... 看到了三题经典题型,就我目前的认识对此题进行总结.如有错误,敬请指正 首先,我们先明确一下JS引擎的工作步骤: js引擎工作分为两步: 1.将这个js中的变量和函数声明保存 ...
- kettle中全局变量的设置
设置全局变量. 找到.properties文件: 在文件中设置值: 在kettle中新建一个job(不用做任何设置): 转换中获取便元的设置: 重启kettle的执行结果:
- 记录PHP的超全局变量$_SERVER
$_SERVER是PHP中十分实用的超全局变量,在开发可移植的网站的时候会变得很有用. 下面我记录一下我自己常用到的几个变量 1.$_SERVER['SERVER_NAME']:记录了网站的域名. 2 ...
- 浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法(转载)
在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:t ...
- C#-WebForm-★内置对象简介★Request-获取请求对象、Response相应请求对象、Session全局变量(私有)、Cookie全局变量(私有)、Application全局公共变量、ViewState
内置对象: 1.Request - 获取请求对象 用法:接收传值 protected void Page_Load(object sender, EventArgs e) { TextBox1.Tex ...
- 全局变量都是window对象的属性
var x = "haha"; var test = function(){ alert(this.x); } 上述,则会弹出 haha的值. 因为在JavaScript的变量作 ...
随机推荐
- 实验吧——因缺思汀的绕过(sql with rollup)
题目地址:http://ctf5.shiyanbar.com/web/pcat/index.php 通读源码,得知出flag的条件 1.需要post提交uname以及pwd,否则直接die了 if ( ...
- JavaWeb 过滤敏感词汇
提交的表单数据,常常要检查有没有敏感词汇,如果有,需要给出提示,或者替换为*. 检查.替换敏感词汇有3种常用的方式 (1)在Servlet中操作. (2)在Filter中先检查.如果要替换敏感词汇,r ...
- CPU和Memory压力测试方法
一:用原生Centos自带的工具 1. CPU 下面命令会创建 CPU 负荷,方法是通过压缩随机数据并将结果发送到 /dev/null: cat /dev/urandom | gzip -9 > ...
- c# MVC5(一) 初步认识以及新建mvc
一:MVC5初始 1:广义MVC(Model--View-Controller): V是界面 : M是数据和逻辑 : C是控制,把M和V链接起来: 是程序设计模式,一种设计理念,可以有效的分离界面和业 ...
- 【Spring AOP】Spring AOP之你必须知道的AOP相关概念(1)
一.什么是AOP AOP(Aspect-oriented Programming)即面向切面编程,是对OOP( Object-oriented Programming)即面向对象编程的一种补充,AOP ...
- Html快速上手
Html 概述 HTML文档 Doctype Meta Title Link Style Script 常用标签 各种符号 p 和 br a 标签 H 标签 select input:checkbox ...
- 日志级别facility
0 EMERG(紧急) 会导致主机系统不可用的情况 1 ALERT(警告) 必须马上采取措施解决的问题 2 CRIT(严重) 比较严重的情况 3 ERR(错误) 运行出现错误 4 WARNING(提醒 ...
- python nose测试框架全面介绍十三 ---怎么写nose插件
之前有一篇文章介绍了自己写的插件 nose进度插件,但最近有朋友问我,看着nose的官方文档写的插件没用,下面再详细介绍一下 一.准备 1.新建一个文件夹,随便文件夹的名字,假设文件夹放在f://aa ...
- python基础之五:dict 字典
1.数据类型的划分:可变数据类型.不可变数据类型 不可变的有:元组(tuple).字符(str).整型(int).布尔型(bool) 它们都可以哈希 可变的:列表(list).set.字典(dict) ...
- contest1 CF1084 div2 oooxx oooxo ooooo
题意: div2D (x)(x) 给出一棵树, 找出一条路径, 使得每一时刻点权和\(\ge\)边权和, 并且点权和\(-\)边权和最大 div2E (x)(o) 给出两个长度为\(n(\le 5e5 ...