思想:

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模式的更多相关文章

  1. PO模式在selenium自动化测试框架有什么好处

    PO模式是在UI自动化测试过程当中使用非常频繁的一种设计模式,使用这种模式后,可以有效的提升代码的复用能力,并且让自动化测试代码维护起来更加方便. PO模式的全称叫page object model( ...

  2. Python+Selenium+Unittest实现PO模式web自动化框架(1)

    1.什么是PO模式? PO是Page Object的缩写 PO模式是自动化测试项目开发实践的最佳设计模式之一,讲页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性. 主要有以下 ...

  3. APP自动化针对PO模式进行二次封装之basepage

    APP自动化跟WEB自动化所使用的框架基本一样,都是采用的PO模式结合pytest框架编写自动化测试脚本,为了提高代码的复用性.稳定性和易维护性,我们针对PO模式进行了二次封装,将日志,等待以及异常截 ...

  4. web自动化针对PO模式进行二次封装之basepage

    在PO模式当中,我们做到了页面对象与测试用例的分离,但在页面对象编写时,我们仍然还有优化的空间.页面对象有一些共同的基本操作,可以封装起来,并可以在基本操作当中加上日志和异常截图的处理.比如说我们在查 ...

  5. 如何将自己的测试脚本分离成PO模式的测试框架

    1 PO模式 1.1 PO模式介绍 Page Object Model 测试页面和测试脚本分离,即页面封装成类,供测试脚本调用. (将项目分为page.py和test.py) 测试用例:就是excel ...

  6. web自动化测试中的PO模式(一)

    1.PO模式的思想 原理: 将页面的元素定位和元素行为封装成一个page类 类的属性:元素的定位 类的行为:元素的操作 页面对象和测试用例分离 测试用例: 调用所需要页面对象中的行为,组成测试用例 测 ...

  7. 自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码

    一.什么是PO模式 全称:page object model  简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! ​ 主要分三层: 1.基础层BaseP ...

  8. UI自动化测试框架:PO模式+数据驱动

    1. PO 设计模式简介 2. 工程结构说明 3. 工程代码实现 page 包 action 包 business_process 包 util 包 conf 包 test_data 目录 log 目 ...

  9. Python_Selenium 之PO模式的思想、优化思路

    一.PO模式思想 PO模式是一种自动化测试设计模式,将页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性. PO设计模式基础(页面作为类.元素对象作为属性.元素操作作为方法) ...

随机推荐

  1. #Python学习笔记:1-3章 (基于《python编程,从入门到实践)

    第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...

  2. 浅谈原生JavaScript实现remove()和recover()

    利用原生JavaScript实现: 1.remove(selectors)删除指定的一个或一组元素. 2.recover(selectors)恢复刚才删除的元素. function remove(se ...

  3. ubuntu16.04下安装运行DSO

    1.下载源码 git clone https://github.com/JakobEngel/dso.git 2.安装依赖项 suitesparse and eigen3 (required). su ...

  4. atoi函数的用法

    库函数原型: #inclue <stdlib.h> int atoi(const char *nptr); 用法:将字符串里的数字字符转化为整形数.返回整形值. 注意:转化时跳过前面的空格 ...

  5. 【每日一题】 UVA - 340 阅读理解+模拟

    https://cn.vjudge.net/problem/UVA-340 题目很难读,差不多读了两天 意思是给你一个n个数的数列,然后有m个询问,每个询问也是一个n个数的数列,让你输出两个数:一个是 ...

  6. linux虚拟机设置本地yum源

    1.挂载ISO镜像 2.创建文件夹,用于挂载光盘,mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom 3.修改 repo 文件 baseurl=file:///挂 ...

  7. 在dbgrideh中允许选择多行,如何知道哪些行被选中

    是个BOOKMARK类型的属性. SelectedRows: TBookmarkList procedure TForm1.Button1Click(Sender: TObject); var i, ...

  8. Guava cache 示例

    pom.xml <!-- guava --> <dependency> <groupId>com.google.guava</groupId> < ...

  9. 【Python全栈-jQuery】jQuery基础知识

    前端学习之jQuery 一. jQuery是什么? <1> jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. < ...

  10. ext.js的mvc

    1.Ext.js的mvc开发模式 在ext.js4.0以后引入mvc开发模式,将js分成model-view-controller三层,使得大量js代码变得更加易于维护和重用,这就是ext.jsmvc ...