selenium PO模式
思想:
1.定义basepage.py用来写公共方法,比如找元素,打开url,切换frame.这样的部分都写在这里.不必每次用都重写.
2.LoginPage.py 每个功能模块一个文件或者一个类
这都是可以的,将每个动作封装成一个个的小组件.
3.这里用unittest框架来测试.
下面,以安居客登录为例
1.公用功能部分 basepage.py
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
'''
公共方法封装:
1.打开浏览器
2.找元素
3.switch_to
4.send_keys
'''
class Action(object): def __init__(self,p_url,s_driver,p_title):
self.base_url = p_url
self.base_driver = s_driver
self.page_title = p_title #打开浏览器,并最大化
def page_open(self,url,title):
self.base_driver.get(url)
self.base_driver.maximize_window()
assert title in self.base_driver.title
#找元素,并加入
def findElement(self,*loc):
try: WebDriverWait(self.base_driver,5,0.5).until(lambda driver: self.base_driver.find_element(*loc).is_displayed())
return self.base_driver.find_element(*loc)
except:
print(u'%s未能找到页面%s元素'%(self,loc)) #切换到frame
def switch_to_frame(self,doc):
self.base_driver.switch_to_frame(doc) #跳出frame
def default_switch(self):
self.base_driver.switch_to.default_content() #重写sendkeys
def send_keys(self,doc,value,clear=True,click=False):
#loc = getattr(self,'_%s'%doc)
element = self.findElement(doc)
if clear: element.clear()
if click: element.click()
element.send_keys(value)
2.功能模块动作封装anjk_Login.py
每个操作封装成一个个小组件.
这里需要注意的是
self.findElement(*self.pwtab_loc).click()
参数中,带*号,为什么要带星号,因为我们参数是一个元组.中间有By.ID这样的对像,如果不加会有问题.
#coding:utf-8
from selenium.webdriver.common.by import By
from scripts import basepage
from selenium import webdriver
class LoginPage(basepage.Action):
#定位元素
username_loc = (By.ID,"pwdUserNameIpt")
password_loc = (By.ID,"pwdIpt")
pwtab_loc = (By.ID,"pwdTab")
btn_loc = (By.ID,"pwdSubmitBtn")
switchFrame = 0
#打开页面
def open_url(self):
self.page_open(self.base_url,self.page_title) #切换frame
def switch_to_f(self):
self.switch_to_frame(self.switchFrame) #切换登录方式
def switch_login(self):
self.findElement(*self.pwtab_loc).click() #输入用户名
def inputUserName(self,username):
self.findElement(*self.username_loc).send_keys(username)
#输入pndc
def inputPassWord(self,password):
self.findElement(*self.password_loc).send_keys(password) #单击登录按钮
def clickLogin(self):
self.findElement(*self.btn_loc).click() if __name__=="__main__":
driver = webdriver.Firefox()
driver.implicitly_wait(30)
url = 'https://login.anjuke.com/login/form?history=aHR0cHM6Ly9zaGFuZ2hhaS5hbmp1a2UuY29tLw=='
username =''
password=''
Login_page = LoginPage(url,driver,u'登录')
Login_page.open_url()
Login_page.switch_to_f()
Login_page.switch_login()
Login_page.inputUserName(username)
Login_page.inputPassWord(password)
Login_page.clickLogin()
3.unittest LoginTest.py
#coding:utf-8
import unittest
from page import anjk_login
from selenium import webdriver
class case_login_ank(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox()
cls.driver.implicitly_wait(30)
cls.url = 'https://login.anjuke.com/login/form?history=aHR0cHM6Ly9zaGFuZ2hhaS5hbmp1a2UuY29tLw=='
cls.username =''
cls.password='' def test_case_login(self):
Login_Page = anjk_login.LoginPage(self.url,self.driver,u'登录')
Login_Page.open_url()
Login_Page.switch_to_f()
Login_Page.switch_login()
Login_Page.inputUserName(self.username)
Login_Page.inputPassWord(self.password)
Login_Page.clickLogin() @classmethod
def tearDownClass(cls):
cls.driver.quit() if __name__=="__main__":
unittest.main()

selenium PO模式的更多相关文章
- PO模式在selenium自动化测试框架有什么好处
PO模式是在UI自动化测试过程当中使用非常频繁的一种设计模式,使用这种模式后,可以有效的提升代码的复用能力,并且让自动化测试代码维护起来更加方便. PO模式的全称叫page object model( ...
- Python+Selenium+Unittest实现PO模式web自动化框架(1)
1.什么是PO模式? PO是Page Object的缩写 PO模式是自动化测试项目开发实践的最佳设计模式之一,讲页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性. 主要有以下 ...
- APP自动化针对PO模式进行二次封装之basepage
APP自动化跟WEB自动化所使用的框架基本一样,都是采用的PO模式结合pytest框架编写自动化测试脚本,为了提高代码的复用性.稳定性和易维护性,我们针对PO模式进行了二次封装,将日志,等待以及异常截 ...
- web自动化针对PO模式进行二次封装之basepage
在PO模式当中,我们做到了页面对象与测试用例的分离,但在页面对象编写时,我们仍然还有优化的空间.页面对象有一些共同的基本操作,可以封装起来,并可以在基本操作当中加上日志和异常截图的处理.比如说我们在查 ...
- 如何将自己的测试脚本分离成PO模式的测试框架
1 PO模式 1.1 PO模式介绍 Page Object Model 测试页面和测试脚本分离,即页面封装成类,供测试脚本调用. (将项目分为page.py和test.py) 测试用例:就是excel ...
- web自动化测试中的PO模式(一)
1.PO模式的思想 原理: 将页面的元素定位和元素行为封装成一个page类 类的属性:元素的定位 类的行为:元素的操作 页面对象和测试用例分离 测试用例: 调用所需要页面对象中的行为,组成测试用例 测 ...
- 自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码
一.什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BaseP ...
- UI自动化测试框架:PO模式+数据驱动
1. PO 设计模式简介 2. 工程结构说明 3. 工程代码实现 page 包 action 包 business_process 包 util 包 conf 包 test_data 目录 log 目 ...
- Python_Selenium 之PO模式的思想、优化思路
一.PO模式思想 PO模式是一种自动化测试设计模式,将页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性. PO设计模式基础(页面作为类.元素对象作为属性.元素操作作为方法) ...
随机推荐
- [No000016A]CSS常用三种选择器
1.HTML Tag p{color:red;} 2.id #myid{color:red;} 3.class .myclass{color:red;} CSS常用文本样式属性 color font- ...
- [No000014F]计算机编程语言家族史
https://www.levenez.com/lang/
- hive优化之并行执行任务
1.与Oracle并行技术一样,hive在执行mapreduce作业时也可以执行并行查询.针对于不同业务场景SQL语句的执行情况,有些场景下SQL的执行是需要分割成几段去执行的,而且期间并不全是存在依 ...
- Dom4j中getStringValue()和getText()用法的区别
这两个方法都是获取文本的,区别是: getText()-----获取当前节点的文本内容,如果当前节点下是一个element元素,那返回的就是null. getStringValue------获取当前 ...
- 转:centos7/rhel7安装较高版本ruby2.2/2.3/2.4+
centos7/rhel7安装较高版本ruby2.2/2.3/2.4+ 环境需求: 在Centos7.3中,通过yum安装ruby的版本是2.0.0,但是如果有些应用需要高版本的ruby环境,比 ...
- Java+Selenium 常见问题QA
一:日期控件二:上传控件三:页面隐藏元素四:弹出窗口的处理五:富文本框编辑器六:元素高亮 一:日期控件selenium不能直接对日期控件操作,可以通过js对日期控件做赋值操作 WebElement i ...
- mysql存储过程游标嵌套循环
自己写的一个mysql存储过程如下: BEGIN DECLARE _did bigint(20);DECLARE _count int;DECLARE s1 int;DECLARE cur_1 CUR ...
- linux md5sum命令
md5sum命令用于生成和校验文件的md5值 生成文件md5值 [root@cdncenter ~]# ll total -rw-r--r-- root root Oct : .txt -rw-r-- ...
- 前端 html button标签
就是一个按钮标签 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- left outer join的on不起作用
left outer join的on不起作用 Why and when a LEFT JOIN with condition in WHERE clause is not equivalent to ...