自动化测试(三)PO模型

2023-11-12

在页面元素不变的情况下,将页面中的所有元素全部提取出来,放入单独的模块中

百度搜索页元素

from selenium.webdriver.common.by import By
from pages.basePage import Page

#百度搜索page,继承基础的Page类
class SearchPage(Page):
    #搜索输入框
    search_input=(By.ID,'kw')
    #点击“百度一下”按钮
    search_button=(By.ID,'su')
    def __init__(self,driver,base_url="http://www.baidu.com"):
        Page.__init__(self,driver,base_url)

    def gotoBaiduHomePage(self):
        print(u"打开首页:",self.base_url)
        self.driver.get(self.base_url)

    def input_search_text(self,text="selenium3"):
        print(u"输入搜索关键字:selenium3")
        self.input_text(self.search_input,text)
        
    def click_search_btn(self):
        print("点击“百度一下”按钮")
        self.click(self.search_button)

用例调用该模块

import unittest
from selenium import webdriver
from pages.searchPage import SearchPage

class testSearchPage(unittest.TestCase):
    def setUp(self):
        self.driver=webdriver.Chrome(executable_path="c:\\chromedriver")

    def testSearch(self):
        driver = self.driver
        url = "http://www.baidu.com"
        text = "selenium"
        assert_title = u"百度一下,你就知道"
        search_Page = SearchPage(driver,url)
        search_Page.gotoBaiduHomePage()
        search_Page.input_search_text(text)
        search_Page.click_search_btn()
        self.assertEqual(search_Page.get_title(),assert_title)

    def tearDown(self):
        self.driver.quit()

但所有模块都有相同的地方就需要一个公共的模块,所有的页面模块都要继承这个基础模块

class Page(object):
    #初始化参数
    def __init__(self,driver,base_url="http://www.baidu.com"):
        self.driver=driver
        self.base_url=base_url
        self.timeout=10

    #重写元素定位方法
    def find_element(self,*loc):
        return self.driver.find_element(*loc)
    def input_text(self,loc,text):
        self.find_element(*loc).send_keys(text)
    def click(self,loc):
        self.find_element(*loc).click()
    def get_title(self):
        return self.driver.title

拆包

# 将未拆包的数据进行传参
# def run(a,*args):
#     #第一个参数传给了a
#     print(a)
#     # args是一个元组,里面是2和3两个参数
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)# *args 相当于 a,b = args
#
# run(1,2,3)

# 将未拆包的元组进行传参
# def run(*args):#args是一个元组
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)
#
# a=(1,2,3)
# run(a)

# 将数字未拆包的元组进行传参
# def run(*args):#args是一个元组
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)
#
# a=(1,2,3)
# run(0,a)

# 将已拆包的元组进行传参
# def run(*args):# args是一个元组 (1,2,3)
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)
#
# a=(1,2,3)
# run(*a)

# 将已拆包的元组进行传参
# def run(*args):# args是一个元组
#     print(args)
#     # *args是将这个元组中的元素依次取出来
#     print("对args拆包:",*args)
#
# a=(1,2,3)
# run(0,*a)

page文件目录下的basePage文件 

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class BasePage():
	def __init__(self,driver,logger):
		self.driver=driver
		self.logger=logger
		self.timeout=10

	def ele_is_presence(self,eletuple):
		try:
			ele=WebDriverWait(self.driver, self.timeout).until(EC.presence_of_element_located(eletuple))
			return ele
		except:
			self.logger.error('ele_is_presence:未找到元素 %s' %eletuple)

	def input_text(self,eletuple,text):
		try:
			self.ele_is_presence(eletuple).send_keys(text)
		except:
			self.logger.error('click:未找到元素 %s 或不能发送文本'%eletuple)

	def click(self,eletuple):
		try:
			self.ele_is_presence(eletuple).click()
		except:
			self.logger.error('click:未找到元素 %s 或不可点击'%eletuple)

	def open_url(self,url):
		self.driver.get(url)

 page文件目录下的loginPage文件 

from selenium.webdriver.common.by import By
from pages.basePage import BasePage

class LoinPage(BasePage):
	username=(By.NAME,'login_info')
	password=(By.NAME,'password')
	submit=(By.CLASS_NAME,'submit_login')

	# 输入用户名
	def input_username(self,name):
		self.input_text(self.username,name)

	# 输入密码
	def input_password(self,pwd):
		self.input_text(self.password,pwd)

	# 点击登录按钮
	def click_submit(self):
		self.click(self.submit)

  page文件目录下的mainPage文件 

from pages.basePage import BasePage
from selenium.webdriver.common.by import By

class MainPage(BasePage):

	login_btn=(By.LINK_TEXT,'登录')

	def enter_loginpage(self):
		self.click(self.login_btn)

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动化测试(三)PO模型 的相关文章

  • vue打包上线如此简单

    大家好 我是大帅子 最近好多人私信我 要我出一期vue的打包上线的文章 那么今天他来了 废话不多说 我们直接开始吧 我们顺便给大家提一下vue项目中的优化 项目打包 1 打开终端 直接在终端输入 我把npm 跟 yarn的打包命令都放在这里
  • CMake增加版本号

    为工程设置版本号 当然可以在源文件中增加版本号变量 但也可以使用CMakeLists txt设置可变的版本号 提供更多的便利性 1 修改CMakeLists txt 用set命令设置版本号 设置最大版本号和最小版本号 set Calcula

随机推荐

  • python 历史版本下载大全

    历史版本下载地址 https www python org ftp python
  • java 对接OmniLayer钱包

    上代码 如果帮助到了你 请点点关注 谢谢 Data public class BtcApi Logger logger Logger getLogger BtcApi class private String rpcUrl private
  • 详解八大排序算法-附动图和源码(插入,希尔,选择,堆排序,冒泡,快速,归并,计数)

    目录 一 排序的概念及应用 1 排序的概念 2 排序的应用 3 常用的排序算法 二 排序算法的实现 1 插入排序 1 1直接插入排序 1 2希尔排序 缩小增量排序 2 选择排序 2 1直接选择排序 2 2堆排序 3 比较排序 3 1冒泡排序
  • Java接口幂等性设计场景解决方案v1.0

    Java接口幂等性设计场景解决方案v1 0 1 面试 实际开发场景 1 1面试场景题目 分布式服务接口的幂等性如何设计 比如不能重复扣款 1 2 题目分析 一个分布式系统中的某个接口 要保证幂等性 如何保证 这个事 其实是你做分布式系统的时
  • JSP session的生命周期简介说明

    转自 JSP session的生命周期简介说明 下文笔者将讲述session生命周期的相关简介说明 如下所示 Session存储在服务器端 当客户端关闭浏览器 并不意味着Session对象的销毁 如果不是显式调用invalidate 去销毁
  • [39题] 牛客深度学习专项题

    1 卷积核大小 提升卷积核 convolutional kernel 的大小会显著提升卷积神经网络的性能 这种说法是 正确的 错误的 这种说法是错误的 提升卷积核的大小并不一定会显著提升卷积神经网络的性能 卷积核的大小会影响网络的感受野 r
  • Java时间处理(UTC时间和本地时间转换)

    文章内容引用来源 http blog csdn net top code article details 50462922 前言 本文主要对UTC GMT CST等时间概念做简单的介绍 比较实用的在于本文最后一个小知识点 带时区格式的时间和
  • python编程题-基本编程题 --python

    1 让Python帮你随机选一个饮品吧 import random listC 加多宝 雪碧 可乐 勇闯天涯 椰子汁 print random choices listC type random choices listC choices函
  • hbuilder如何设置图片居中显示_啊哦!WORD设置格式后,我插入的图片显示不全怎么办?...

    每天分享一个小技巧 不如各位在日常办公中 有没有这样的烦恼 一个编辑好的文档 已经到了最后一步 Ctrl A 全选 设置格式 然后 发现文档里的图片 它 它 它 它 它显示不全了 就像这样 其实导致这种问题发生的原因 很简单 就是因为我们批
  • LeetCode算法题 - 两整数相加(简单)

    题目 func sum num1 int num2 int int return num1 num2
  • SpringBoot通过Excel文件导入用户信息,找出Excel(ArrayList)中重复的元素和个数

    Excel文件内容如下 其中userCode不能重复 怎么返回重复的userCode和个数呢 因为Map是存储键值对这样的双列数据的集合 其中存储的数据是无序的 它的键是不允许重复的 值是允许重复的 也就是只保留一项数据 不记录重复数据 所
  • 2021年南京大学842考研-软件工程部分代码设计题

    题干 1 以下代码是否有问题 有什么影响 2 给出改进 按钮构件 Class Button private Label label private List list public void change list update label
  • 启动hadoop集群

    1 配置core site xml 每个节点上都要配置 路径 usr local hadoop 2 7 3 etc hadoop core site xml 配置项1 name fs defaultFS value hdfs master的
  • 敏感性和特异性

    敏感性 sensitivity 在测验的阳性结果中 有多少是真阳性 就是在生病的病例中 能检测出来多少 是病例中 你的诊断方法对疾病的敏感程度 识别程度 敏感性越高 识别疾病 阳性 的概率越高 不漏诊概率 特异性 Specificity 在
  • 使用yolov8进行字符检测

    最近使用yolov8进行字符检测任务 因为场景数据是摆正后的证件数据 所以没有使用DB进行模型训练 直接选用了yolov8n进行文本检测 但是长条字符区域检测效果一直不太好 检出不全 通过检测和分割等算法的调试 发现算法本身不太适合作文本检
  • Qt 之进程间通信(TCP/IP)

    Qt 之进程间通信 TCP IP 原创 一去丶二三里 发布于2016 02 04 10 19 46 阅读数 15428 收藏 更新于2018 05 30 10 35 06 分类专栏 Qt Qt 实战一二三
  • webpack4打包流程分析,实现一个简易的webpack打包器

    文章内容输出来源 拉勾教育前端高薪训练营 webpack打包的流程大致可以归纳成 options 通过config文件传递进来的配置参数 webpack 生成Compiler实例及其他webpack初始化逻辑 compiler 编译的核心桥
  • group by是否会用到索引_进阶联合索引

    单字段索引不能满足你了 那就多来几个 创建普通索引的时候 指定两个或更多的字段这就是联合索引 语法如下 alter table 表 add index 索引名 字段1 字段2 维护数据库时发现现索引重复了 这时可以删掉重复的索引 释放内存空
  • 让bat批处理以管理员权限运行的实现方法

    1 第一种方法 有的电脑是非管理员登录 运行程序时 需要提示是否运行运行 解决方法如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 echooff 1 2 ver find 5 gt nul goto Admin
  • 自动化测试(三)PO模型

    在页面元素不变的情况下 将页面中的所有元素全部提取出来 放入单独的模块中 百度搜索页元素 from selenium webdriver common by import By from pages basePage import Page