这里重新阐述下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_全局变量的使用相关推荐

  1. Linux shell 学习笔记(4)— linux 环境变量(全局变量、局部变量及变量持久化)

    1. 环境变量概念及分类 bash shell 用一个叫作环境变量(environment variable)的特性来存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因).这项 ...

  2. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

  3. python的 局部变量与全局变量

    局部变量: 只在函数内部定义并使用的变量,只在定义的函数内部使用有效, def function_a():a = 1def function_b(): a =1 只能在函数function_a 中使用 ...

  4. Java:全局变量(成员变量)与局部变量

    分类细则: 变量按作用范围划分分为全局变量(成员变量)和局部变量 成员变量按调用方式划分分为实例属性与类属性 (有关实例属性与类属性的介绍见另一博文https://blog.csdn.net/Drag ...

  5. C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)

    作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量: 在函数参数的定义中声明的变量,称为形式参数: 在所有函数外部声明的变量,称为全局变量: 1. ...

  6. 在PHP中使用全局变量的几种方法

    简介 即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数据库连接类.用户资料等等.有很多方法能够使这些数据 ...

  7. 链接全局变量再说BSS段的清理

    废话就不多说了,开始... 再说BSS段的清算 以前遇到一个裸机程序不能改变全局变量值的问题,最后模模糊糊处理了:手动添加了一个链接脚本,清算了BSS段.问题得以处理,就认定是BSS段清算的问题,全局 ...

  8. php 魔术变量和超级全局变量,PHP超级全局变量与魔术变量

    PHP在设计的时候已经预定义了9个超级全局变量.8个魔术变量和13魔术函数,这些变量和函数可以在脚本的任何地方不用声明就可以使用. 在PHP开发时会频繁的使用这些变量,这些变量可以方便的帮我们解决很多 ...

  9. pythonclass全局变量_Python-多处理全局变量更新未返回给父级

    我正在尝试从子流程中返回值,但是不幸的是这些值无法拾取.因此,我在线程模块中成功使用了全局变量,但在使用多处理模块时却无法检索在子流程中完成的更新.我希望我想念一些东西. 在给定var dataDV0 ...

最新文章

  1. 转:Flash 插件面板 DragonBonesDesignPanel 的绿色安装方法
  2. R语言为dataframe添加新的数据列(add new columns):使用R原生方法、data.table、dplyr等方案
  3. linux下配置jdk+tomcat
  4. 《C++ 开发从入门到精通》——1.3 使用Visual Studio 2010
  5. 在职场中,长得漂亮真的有用吗?
  6. html页面跳转到appstore,iOS 应用中直接跳转到 AppStore 的方法
  7. flex builder method
  8. webloigc12服务启动不了_weblogic启动不能锁定AdminServer.lok的故障处理
  9. pycharm中配置Git教程
  10. 使用路由器搭建局域网
  11. mysql 分表联合查询_解决分表后联合查询
  12. 民工哥读者中秋福利!包邮送书!
  13. 云计算系列知识点——网络(公网、私网、VPN等)基础知识与计费模式
  14. php 瀑布流 分页,waterfall瀑布流布局+动态渲染的实现
  15. 爬动漫网站数据_通过这三种动漫爱上数据科学和技术
  16. 使用fsck命令检查并修复linux文件系统
  17. 用字体,每次都要先开软件,ifonts闪退?不好用怎么办
  18. slab为什么要进行染色处理
  19. 八、JDBC批量处理sql语句
  20. pytorch实现特征图可视化,代码简洁,包教包会

热门文章

  1. PHP网站打开速度很慢
  2. js获取当前设备的操作系统类型
  3. windows service 的错误 错误 14001:
  4. C语言在屏幕上输出以下图案 * *** ***** ******* ********* *********** ************* *********** *********
  5. RoI pooling层详解
  6. Linux 命令之ssh、scp
  7. AbstractInterceptor和Interceptor的区别
  8. 小区信息发布服务器,数字化小区信息发布系统解决方案
  9. 你的“差不多”,其实差很多
  10. 模型训练中的过拟合\欠拟合