pytest_全局变量的使用
这里重新阐述下PageObject设计模式:
PageObject设计模式是selenium自动化最成熟,最受欢迎的一种模式,这里用pytest同样适用
这里直接提供代码:
全局变量
conftest.py
""" conftest.py 全局变量,主要实现以下功能: 1、添加命令行参数broswer, 用于切换不用浏览器 2、全局参数driver调用 """import pytest from selenium import webdriverdef 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 timefrom 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','3306','root','123456','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 webdriverdriver = 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, timeclass Test_login():url = loginpage.urlusername_data = loginpage.usernamepaw_data = loginpage.passwordprint("调用信息 账号: %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
声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。
转载于:https://www.cnblogs.com/lixy-88428977/p/10101037.html
pytest_全局变量的使用相关推荐
- Linux shell 学习笔记(4)— linux 环境变量(全局变量、局部变量及变量持久化)
1. 环境变量概念及分类 bash shell 用一个叫作环境变量(environment variable)的特性来存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因).这项 ...
- java局部变量全局变量,实例变量的理解
java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...
- python的 局部变量与全局变量
局部变量: 只在函数内部定义并使用的变量,只在定义的函数内部使用有效, def function_a():a = 1def function_b(): a =1 只能在函数function_a 中使用 ...
- Java:全局变量(成员变量)与局部变量
分类细则: 变量按作用范围划分分为全局变量(成员变量)和局部变量 成员变量按调用方式划分分为实例属性与类属性 (有关实例属性与类属性的介绍见另一博文https://blog.csdn.net/Drag ...
- C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)
作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量: 在函数参数的定义中声明的变量,称为形式参数: 在所有函数外部声明的变量,称为全局变量: 1. ...
- 在PHP中使用全局变量的几种方法
简介 即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数据库连接类.用户资料等等.有很多方法能够使这些数据 ...
- 链接全局变量再说BSS段的清理
废话就不多说了,开始... 再说BSS段的清算 以前遇到一个裸机程序不能改变全局变量值的问题,最后模模糊糊处理了:手动添加了一个链接脚本,清算了BSS段.问题得以处理,就认定是BSS段清算的问题,全局 ...
- php 魔术变量和超级全局变量,PHP超级全局变量与魔术变量
PHP在设计的时候已经预定义了9个超级全局变量.8个魔术变量和13魔术函数,这些变量和函数可以在脚本的任何地方不用声明就可以使用. 在PHP开发时会频繁的使用这些变量,这些变量可以方便的帮我们解决很多 ...
- pythonclass全局变量_Python-多处理全局变量更新未返回给父级
我正在尝试从子流程中返回值,但是不幸的是这些值无法拾取.因此,我在线程模块中成功使用了全局变量,但在使用多处理模块时却无法检索在子流程中完成的更新.我希望我想念一些东西. 在给定var dataDV0 ...
最新文章
- 转:Flash 插件面板 DragonBonesDesignPanel 的绿色安装方法
- R语言为dataframe添加新的数据列(add new columns):使用R原生方法、data.table、dplyr等方案
- linux下配置jdk+tomcat
- 《C++ 开发从入门到精通》——1.3 使用Visual Studio 2010
- 在职场中,长得漂亮真的有用吗?
- html页面跳转到appstore,iOS 应用中直接跳转到 AppStore 的方法
- flex builder method
- webloigc12服务启动不了_weblogic启动不能锁定AdminServer.lok的故障处理
- pycharm中配置Git教程
- 使用路由器搭建局域网
- mysql 分表联合查询_解决分表后联合查询
- 民工哥读者中秋福利!包邮送书!
- 云计算系列知识点——网络(公网、私网、VPN等)基础知识与计费模式
- php 瀑布流 分页,waterfall瀑布流布局+动态渲染的实现
- 爬动漫网站数据_通过这三种动漫爱上数据科学和技术
- 使用fsck命令检查并修复linux文件系统
- 用字体,每次都要先开软件,ifonts闪退?不好用怎么办
- slab为什么要进行染色处理
- 八、JDBC批量处理sql语句
- pytorch实现特征图可视化,代码简洁,包教包会
热门文章
- PHP网站打开速度很慢
- js获取当前设备的操作系统类型
- windows service 的错误 错误 14001:
- C语言在屏幕上输出以下图案 * *** ***** ******* ********* *********** ************* *********** *********
- RoI pooling层详解
- Linux 命令之ssh、scp
- AbstractInterceptor和Interceptor的区别
- 小区信息发布服务器,数字化小区信息发布系统解决方案
- 你的“差不多”,其实差很多
- 模型训练中的过拟合\欠拟合