页面对象模型Page Object Modal是一种脚本设计模型,将页面元素,业务操作分割,当实际页面发生变化的时候,只需要修改页面元素文件,业务操作不需要修改。

具体实现需要先写一个页面公共类,里面写公共的方法,比如把元素定位,元素操作等方法重新封装。之后所有页面类继承页面公共类,页面类中只写该页面需要定位的元素,并把对应元素的操作封装成一个个方法。最后测试类调用这些方法组成一个业务测试用例。

还是以百度搜索为例子

framework包下面放一些公共类

pageobject包下面放需要测试的页面类

testsuites包下面放对应页面的测试类

class BasePage(object):

    def __init__(self,driver):
self.driver = driver def find_element(self,selector):
by = selector[0]
value = selector[1]
element = None
if by =='id' or by =='name' or by == 'class' or by == 'tag' or by =='link' or by =='plink' or by =='css' or by == 'xpath':
if by == 'id':
element = self.driver.find_element_by_id(value)
elif by == 'name':
element = self.driver.find_element_by_name(value)
elif by == 'class':
element = self.driver.find_element_by_class_name(value)
elif by == 'tag':
element = self.driver.find_element_by_tag_name(value)
elif by == 'link':
element = self.driver.find_element_by_link_text(value)
elif by == 'plink':
element = self.driver.find_element_by_partial_link_text(value)
elif by == 'css':
element = self.driver.find_element_by_css_selector(value)
elif by == 'xpath':
element = self.driver.find_element_by_xpath(value)
else:
print('没有找到元素')
return element
else:
print('输入的元素定位方式错误') def send(self,selector,value):
element=self.find_element(selector)#调用封装的定位元素方法
try:
element.send_keys(value)
print('输入的内容%s' % value)
except BaseException:
print('error') def click(self,selector):
element = self.find_element(selector)
element.click()

这是封装的公共方法。封装的元素定位方法需要传一个数组,数组下标第一个是定位方式,第二个是具体的值。元素定位写在封装的元素操作里面,不写在后面页面类里是因为方便在页面类里面重复使用元素。

from framework.base_page import BasePage

class baidu(BasePage):
kw = ['id','kw']#定位搜索输入框
su = ['id','su']#搜索按钮 def kw_send(self,value):#搜索框输入内容
self.send(self.kw,value) def su_click(self):#点击搜索按钮
self.click(self.su)

这是百度搜索页面的页面类。定位的元素单独拿出来,这样就可以重复使用。然后元素的操作也封装成一个方法。就比如上面这个搜索框输入内容。value这个值在后面测试类的时候,可以根据输入的不同,组装成不同的测试用例。

from selenium import webdriver
from pageobject.BaiduPage import baidu
import unittest
class BaiduSerch(unittest.TestCase): def test_baidu(self):
dr = webdriver.Firefox()
dr.get('https://www.baidu.com')
bai = baidu(dr)
bai.kw_send('selenium')
bai.su_click() if __name__ =='__main__':
unittest.main()

最后就是测试类的,这里使用了unittest单元测试框架。bai = baidu(dr)每个页面都需要把driver传进去。使用WebDriver有一个要注意的就是 脚本运行的时候要保持只有一个driver。

最新文章

  1. CentOS双网卡绑定bond0
  2. 了解canvas
  3. 如何在R中加载”xlsx”包
  4. c++重载运算符注意
  5. KEIL编译错误总结:
  6. Ubuntu 启用root账户
  7. PreparedStatement可以有效地防止sql被注入
  8. linux 命令入门
  9. react 高阶组件的 理解和应用
  10. 2019-2-20C#开发中常用加密解密方法解析
  11. SQL Server: Datetime,Datetime2
  12. 怎样从外网访问内网Nginx?
  13. [Swift]lower_bound和upper_bound
  14. “一次编写,随处运行” Intel HTML5技术研讨会
  15. hdu1598
  16. [Usaco2009 Dec]Toll 过路费
  17. 图片加载库Glide的封装工具类,方便以后使用
  18. SQL Plus和PL/SQL
  19. 爬虫开发14.scrapy框架之分布式操作
  20. php5.4以上运行yii框架出现问题的解决方法

热门文章

  1. linux 网络连接数查看方法
  2. Web项目发布BUG总结
  3. 固定footer在底部
  4. 开源框架.netCore DncZeus学习(五)下拉树的实现
  5. JS定义函数
  6. nexys4ddr数码管动态扫描Verilog例程
  7. SSH整合方案二(不带hibernate.cfg.xml)
  8. byte数组和int之间相互转化的方法
  9. CPU缓存一致性协议—MESI详解
  10. ES6走一波 Proxy/Reflect