Python自动化测试PO模式
页面元素定位信息
页面元素定位信息文件
[leadscloud_login]
input_user_name = xpath>//*[@id='main']/div/div[2]/div[2]/div[2]/div/form/div[1]/div/div/input
input_user_password = xpath>//*[@id='main']/div/div[2]/div[2]/div[2]/div/form/div[2]/div/div[1]/input
button_login = xpath>//*[@id='main']/div/div[2]/div[2]/div[2]/div/form/div[3]/div/button
解析定位信息获取元素对象
解析定位信息
"""
用于解析配置文件,并获取页面元素定位表达式
"""
# -*- coding: utf-8 -*-
# @Time: 2019/2/26 11:43
# @Author : Yang DaWei
# @Project : LeadsCloudAutomation
# @FileName: ParseElementLocator.py
from configparser import ConfigParser
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait class ParseConfigFile:
"""
初始化解析文件类
"""
def __init__(self, driver, page_element_locator):
self.driver = driver
self.cf = ConfigParser()
self.cf.read(page_element_locator, encoding='utf-8') def get_items_section(self, section_name):
"""
获取配置文件中指定section下的所有option_name键值对,并以字典类型返回给调用者
注意:使用self.cf.items(sectionName)此种方法获取到
配置文件中的options内容均被转换成小写,如loginPage.frame将被转换成loginpage.frame
"""
options_dict = dict(self.cf.items(section_name))
return options_dict def get_option_value(self, section_name, option_name):
"""
获取指定section下的指定option的值
"""
value = self.cf.get(section_name, option_name)
return value def get_element_location(self, section_name, option_name, timeout):
"""
获取页面元素定位表达式,并以元素对象的形式返回给调用者
:param section_name:
:param option_name:
:param timeout:
:return:
"""
driver = self.driver
location = self.get_option_value(section_name, option_name)
location_type = location.split(">")[0]
location_value = location.split(">")[1]
print("读取到的定位类型为:" + location_type + "\t读取到的定位信息为:" + location_value)
try:
element = WebDriverWait(driver, timeout).until(lambda x: x.find_element(by=location_type,
value=location_value))
return element
except Exception as e:
print("定位元素超过" + str(timeout) + "秒,详细异常信息入下:")
raise e def highlight_element(self, driver, element):
"""
调用JS,用于高亮控件
:param driver:
:param element:
:return:
"""
driver.execute_script("arguments[0].setAttribute('style', arguments[1]);", element,
"background: yellow; border:2px solid red;") if __name__ == '__main__':
from selenium import webdriver
# from Config import VarConfig
from PageObject.Login_Page import Login_Page
# locator_file = VarConfig.login_page driver = webdriver.Firefox()
driver.get("http://test.leadscloud.com/Front-Vue/#/login")
sleep(5)
Login_Page(driver).input_user_name().send_keys("yangdawei_10171")
# ge = ParseConfigFile(driver, locator_file)
# input_user_name = ge.get_element_location("leadscloud_login", "input_user_name", 5)
# ge.highlight_element(driver, input_user_name)
Login_Page(driver).input_user_password().send_keys("yangdawei_10166")
# input_user_password = ge.get_element_location("leadscloud_login", "input_user_password", 5)
# ge.highlight_element(driver, input_user_password)
# input_user_password.send_keys("111111")
# button_login = ge.get_element_location("leadscloud_login", "button_login", 5)
# ge.highlight_element(driver, button_login)
Login_Page(driver).login_button().click()
driver.quit()
页面元素对象封装
解析定位文件并封装成可操作对象
'''用于获取PageElementLocator.ini 中Login页面元素对象'''
# encoding = utf-8
"""
__title__ = ''
__author__ = 'davieyang'
__mtime__ = '2018/4/21'
"""
from Util.GetElements import *
from Util.ParseElementLocator import ParseConfigFile class LoginPage(object): def __init__(self, driver):
self.driver = driver
self.parseCF = ParseConfigFile()
self.loginOptions = self.parseCF.getItemsSection("163mail_login")
print(self.loginOptions) def switchtoframe(self):
try:
# 从定位表达式配置文件中读取frame的定位表达式
locatorExpression = self.loginOptions["loginPage.frame".lower()].split('>')[1]
self.driver.switch_to.frame(locatorExpression)
except Exception as e:
raise e def switchtodefaultframe(self):
try:
self.driver.switch_to.default_content()
except Exception as e:
raise e def usernameobj(self):
try:
# 从定位表达式配置文件中读取定位用户名如输入框的定位方式和表达式
locateType, locatorExpression = self.loginOptions["loginPage.username".lower()].split(">")
# 获取登录页面的用户名输入框页面对象,返回给调用者
elementobj = get_element(self.driver, locateType, locatorExpression)
return elementobj
except Exception as e:
raise e def passwordobj(self):
try:
# 从定位表达式配置文件中读取定位密码输入框的定位方式和表达式
locateType, locatorExpression = self.loginOptions["loginPage.password".lower()].split(">")
# 获取登录页面的密码输入框页面对象,并返回给调用者
elementoj = get_element(self.driver, locateType, locatorExpression)
return elementoj
except Exception as e:
raise e def loginbutton(self):
try:
# 从定位表达式配置文件中读取定位登录按钮的定位方式和表达式
locateType, locatorExpression = self.loginOptions["loginPage.loginbutton".lower()].split(">")
# 获取登录页面的登录按钮页面对象,并返回给调用者
elementobj = get_element(self.driver, locateType, locatorExpression)
return elementobj
except Exception as e:
raise e if __name__ == '__main__':
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path="F:\\automation\\webdriver\\chromedriver.exe")
driver.get("http://mail.163.com")
time.sleep(5)
login = LoginPage(driver)
login.switchtoframe()
login.usernameobj().send_keys("xxxx")
login.passwordobj().send_keys("xxxx")
login.loginbutton().click()
time.sleep(10)
login.switchtodefaultframe()
assert u"未读邮件" in driver.page_source
driver.quit()
测试代码示例
测试脚本
# -*- coding: utf-8 -*-
# @Time: 2019/3/1 13:40
# @Author : Yang DaWei
# @Project : LeadsCloudAutomation
# @FileName: test_login_page.py
import time
import unittest
from selenium import webdriver
from PageObject.Login_Page import Login_Page class Test_Login_Page(unittest.TestCase): driver = None
@classmethod
def setUpClass(cls):
""" set Up method """
cls.driver = webdriver.Chrome()
cls.test_page = ''
time.sleep(3) def tearDown(self):
""" tear Down method """ def setUp(self):
"""setUP pass""" @classmethod
def tearDownClass(cls):
""" tear Down method """
cls.driver.close() def test_login(self):
self.driver.get("http://admin.leadscloud.com/Front-Vue/#/")
Login_Page(self.driver).input_user_name().send_keys("yangdawei_10171")
Login_Page(self.driver).input_user_password().send_keys("")
Login_Page(self.driver).login_button().click()
try:
self.assertTrue("仪表盘", self.driver.page_source)
print("断言成功")
except Exception as e:
raise e
time.sleep(10)
Python自动化测试PO模式的更多相关文章
- 自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码
一.什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BaseP ...
- Python+Selenium+Unittest实现PO模式web自动化框架(1)
1.什么是PO模式? PO是Page Object的缩写 PO模式是自动化测试项目开发实践的最佳设计模式之一,讲页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性. 主要有以下 ...
- PO模式在selenium自动化测试框架有什么好处
PO模式是在UI自动化测试过程当中使用非常频繁的一种设计模式,使用这种模式后,可以有效的提升代码的复用能力,并且让自动化测试代码维护起来更加方便. PO模式的全称叫page object model( ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- web自动化测试中的PO模式(一)
1.PO模式的思想 原理: 将页面的元素定位和元素行为封装成一个page类 类的属性:元素的定位 类的行为:元素的操作 页面对象和测试用例分离 测试用例: 调用所需要页面对象中的行为,组成测试用例 测 ...
- UI自动化测试框架:PO模式+数据驱动
1. PO 设计模式简介 2. 工程结构说明 3. 工程代码实现 page 包 action 包 business_process 包 util 包 conf 包 test_data 目录 log 目 ...
- selenium+python自动化测试系列(一):登录
最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重,为了减轻回归测试的工作量,所以考虑后台 ...
- selenium2 python自动化测试实战(回归测试)
selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...
- PO模式学习笔记
框架: 1.PO模式应用(测试对象和测试用例分离)(写到简历中) 2.引入ddt 3.深入分层:测试数据分离 4.遵循原则:测试用例的独立性 5.深入分层:元素定位分离 6.框架优化:提取basepa ...
随机推荐
- 分布式消息通信之RabbitMQ_Note
目录 1. RabbitMQ 安装 2. RabbitMQ 应用场景,特性 3. 官网入门指引 4. RabbitMQ 工作模型 5. RabbitMQ 主要的几种交换机类型 6. Java API的 ...
- php 云片国外短信实例
<?php namespace Ruifi\App; class SmsL { public function smsIcode($moblie,$sms_code,$intl_code){ h ...
- SSRAM、SDRAM和Flash简要介绍
问题1:什么是DRAM.SRAM.SDRAM?答:名词解释如下DRAM--------动态随即存取器,需要不断的刷新,才能保存数据,而且是行列地址复用的,许多都有页模式SRAM--------静态的随 ...
- TCP 客户端编程
1.Qt中TCP客户端编程 对Qt编程而言,网络只是数据传输的通道: Qt提供了QTcpSocket类(封装了TCP协议细节): 将QTcpSocket的对象当做黑盒使用,进行数据首发. 1.1QTc ...
- js 读取文本文件,日志内容
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PCL学习(一)从PLY文件读入点云数据
#include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #inclu ...
- SQL-TSQL
一.系统存储过程 常用 sp_helptext --查看可编程性(存储过程.函数.触发器.规则.默认值),表中(约束.触发器) EXEC sp_helptext f_M_Student 二.全局变量 ...
- Kafka无法消费?!我的分布式消息服务Kafka却稳如泰山!
在一个月黑风高的夜晚,突然收到现网生产环境Kafka消息积压的告警,梦中惊醒啊,马上起来排查日志. 问题现象:消费请求卡死在查找Coordinator Coordinator为何物?Coordinat ...
- MarkdownPad2安装与破解-转载
MarkdownPad安装包下载链接链接:https://pan.baidu.com/s/1o7c4W7C2d8zCPh5z7y4IvQ提取码:e4bf 下载解压之后,找要MarkdownPad2.e ...
- 音视频入门-01-认识RGB
* 音视频入门文章目录 * RGB 简介 RGB 色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红 ...