思想:

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. WPF 打开指定文件路径的文件资源管理器

    x 需求是想让WPF打开一个指定文件路径的文件夹,但是搜出来的八成都是<打开文件>的这样的↓ Microsoft.Win32.OpenFileDialog open_file = new ...

  2. iOS循环引用常见场景和解决办法

    好多场景会导致循环引用,例如使用Block.线程.委托.通知.观察者都可能会导致循环引用. 1.委托 遵守一个规则,委托方持有代理方的强引用,代理方持有委托方的弱引用. 实际场景中,委托方会是一个控制 ...

  3. python字符串常用方法

    #1.strip()去掉空格(字符串首.尾空格).lstrip()去掉左侧空格.rstrip()去掉右侧空格print(' abc '.lstrip())#>>abcprint(' abc ...

  4. mysql表引擎myisam改为innodb

    1.进入数据库 2.SELECT  CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS sql_statements FROM    ...

  5. ArcEngine利用索引获取图层

    近期在做GP工具相关的功能,需要获取到图层并用ComboBox列出,比如图层更新: 开始用了根据图层名获取图层,但这样有个弊端,遇到不同文件夹的相同图层名称的图层gg了.本来想利用图层名+路径来区分, ...

  6. 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 网络层协议 MAC帧、IP数据报、TCP报文 关系 IP地址与硬件地址 链路层与网络层

    小结: 1. 网络层两种服务 虚电路服务 virtual circuit  电信网 网络层负责可靠交付 数据报服务  网络层不负责可靠交付 提供灵活的.无连接的.尽最大努力交付的数据报服务 不提供服务 ...

  7. 待选框、目标框select项目左右移动

    效果: 可以用一般的select multiple="multiple".自己写jq定义左移.右移.全部左移.全部右移.保存submit后端来操作select属性,方法参考html ...

  8. [others] 一个酷酷的站

    https://xkcd.com/ https://xkcd.com/1080/

  9. Flink - allowedLateness

    WindowOperator processElement final Collection<W> elementWindows = windowAssigner.assignWindow ...

  10. 转:GET和POST两种基本请求方法的区别

    原文地址:GET和POST两种基本请求方法的区别 原文如下: GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL ...