思想:

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. 使用Kdenlive为视频加入马赛克特效

    Kdenlive(KDE Non-Linear Video Editor)是一种基于MLT框架.KDE和Qt的自由开源的非线性影片编辑器.其底层包含了FFmpeg,所以可以支持FFmpeg中的所有视频 ...

  2. 汇编debug工具详解

    关于debug工具里的各个指令的用法 debug调试工具详解: r:可以查看,和改变寄存器中的内容具体用法:·直接输入r的时候,回车显示当前指向内存单元中所有寄存器中的内容,并将所指机器码翻译成汇编指 ...

  3. ubuntu经常断网、掉线、上不去网的原因

    方案一: ubuntu经常断网.掉线.上不去网的原因,很可能是因为IPv6的关系,Ubuntu默认开启IPv6,在“设置--wifi--齿轮图标”中关掉就可以了. 经我环境测试,此方法无效 方案二: ...

  4. Codeforces 1137D - Cooperative Game - [交互题+思维题]

    题目链接:https://codeforces.com/contest/1137/problem/D 题意: 交互题. 给定如下一个有向图: 现在十个人各有一枚棋子(编号 $0 \sim 9$),在不 ...

  5. 上传本地代码到github&&从github下载源码

    最近在玩github,下面简单介绍下githup的使用 将本地代码同步到github. 使用Git GUI同步  1,先下载git,然后安装.右键如图所示. 2,在github里新建一个 reposi ...

  6. 2018/04/25 PHP7的编译安装

    为什么要编译安装? 因为最近要学习 swoole ,想使用目前最新的 PHP7.2.4 ,但是我所在的 Ubuntu-16.04 的 apt 下只有 PHP7.0 的版本. 加上自己也想学习一下源码的 ...

  7. java 线程(五)线程安全 Lock接口

    package cn.sasa.demo3; import java.util.concurrent.ExecutionException; public class ThreadDemo { pub ...

  8. Asp.net中"正在中止线程"错误解决方法

    项目中出现“正在中止线程”问题,百度后台发现,都是因为用到Response.End.Response.Redirect 或 Server.Transfer 方法. 原因: Response.End 方 ...

  9. 深入SQL Server优化【推荐】

    深入sql server优化,MSSQL优化,T-SQL优化,查询优化 十步优化SQL Server 中的数据访问故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性 ...

  10. 前端 HTML form表单标签 textarea标签 多行文本

    <textarea></textarea>作用:允许用户录入多行数据到表单控件中 <!DOCTYPE html> <html lang="en&qu ...