山东省工程建设招标信息网站,如何做网站竞价排名,怎样制作网页游戏,企业做网站的用途1. 简介 这篇文章主要是分享讲解一下#xff0c;如何封装自己用到的方法和类。以便方便自己和别人的调用#xff0c;这样就可以避免重复地再造轮子。 封装#xff08;Encapsulation#xff09;是面向对象的三大特征之一#xff08;另外两个是继承和多态#xff09;#…1. 简介 这篇文章主要是分享讲解一下如何封装自己用到的方法和类。以便方便自己和别人的调用这样就可以避免重复地再造轮子。 封装Encapsulation是面向对象的三大特征之一另外两个是继承和多态它指的是将对象的状态信息隐藏在对象内部不允许外部程序直接访问对象内部信息而是通过该类所提供的方法来实现对内部信息的操作和访问。
就好比使用计算机我们只需要使用计算机提供的键盘就可以达到操作计算机的目的至于在敲击键盘时计算机内部是如何工作我们根本不需要知道。
封装机制保证了类内部数据结构的完整性因为使用类的用户无法直接看到类中的数据结构只能使用类允许公开的数据很好地避免了外部对内部数据的影响提高了程序的可维护性。总的来说对一个类或对象实现良好的封装可以达到以下目的 隐藏类的实现细节。 让使用者只能通过事先预定的方法来访问数据从而可以在该方法里加入控制逻辑限制对属性的不合理访问。 可进行数据检查从而有利于保证对象信息的完整性。 便于修改提高代码的可维护性。
为了实现良好的封装需要从以下两个方面来考虑 将对象的属性和实现细节隐藏起来不允许外部直接访问。 把方法暴露出来让方法来控制对这些属性进行安全的访问和操作。
因此实际上封装有两个方面的含义把该隐藏的隐藏起来把该暴露的暴露出来。
2. 二次封装Selenium中几个方法 本文来介绍如何把常用的几个webdriver的方法封装到自己写的一个类中去这个封装过程叫二次封装Selenium方法。我们把打开站点浏览器前进和后退关闭和退出浏览器这这个方法封装到一个新写的类中去。
我们按照如下层次结构在PyCharm中新建两个包和两个.py文件 上图baidu_search.py是我们编写测试脚本的python文件具体测试代码写在这个文件。包test1下的basepage.py文件是这次我们介绍的二次封装selenium方法而新建的。这里提一下python中默认规则包名和文件名都是小写类名称单词首字母大写函数名称小写多个字母下划线隔开。我们尽量遵守下这个不成文的约定。
来看看basepage.py的内容
2.1 代码实现 2.2 参考代码
# codingutf-8class BasePage(object):主要是把常用的几个Selenium方法封装到BasePage这个类我们这里演示以下几个方法back()forward()get()quit()def __init__(self, driver):写一个构造函数有一个参数driver:param driver:self.driver driverdef back(self):浏览器后退按钮:param none:self.driver.back()def forward(self):浏览器前进按钮:param none:self.driver.forward()def open_url(self, url):打开url站点:param url:self.driver.get(url)def quit_browser(self):关闭并停止浏览器服务:param none:self.driver.quit()
上面的是文档注释一般在类的开始和函数的开始用两个括起来简单描述下这个类或者函数的功能。
3. 调用自己封装过的方法
接下来看看我们脚本文件中如何去调用我们自己封装过的方法。
baidu_search.py的内容如下
3.1 代码实现
3.2 参考代码
# codingutf-8
import time
from selenium import webdriver
from blog.basepage import BasePageclass BaiduSearch(object):driver webdriver.Chrome()driver.maximize_window()driver.implicitly_wait(10)basepage BasePage(driver)def open_baidu(self):self.basepage.open_url(https://www.baidu.com)time.sleep(1)def test_search(self):self.driver.find_element_by_id(kw).send_keys(Selenium)time.sleep(1)self.basepage.back()self.basepage.forward()self.basepage.quit_browser()baidu BaiduSearch()
baidu.open_baidu()
baidu.test_search()
3.3 运行结果
运行代码后控制台打印如下图的结果 上面self.basepage的几行代码就是调用我们自己封装的方法去执行相关webdriver操作。这个只是一个简单的封装介绍等后面我们介绍了字符串切割我们会再次介绍二次封装Selenium方法例如将会把八大find_element方法封装到一个方法里去。
4. 封装一个自己的类-浏览器引擎类 通过上边的一小节我们知道了如何去封装几个简单的Selenium方法到我们自定义的类所以我们趁热打铁这次我们编写一个类叫浏览器引擎类通过更改一个字符串的值利用if语句去判断和控制启动那个浏览器。这里我们暂时支持三大浏览器
IE,Chrome,Firefox。这里有一个前提条件在基础篇中启动三大浏览器的driver文件检查下你的Python安装路径下有没有这三个driver插件如果没有请回到基础篇的如何启动火狐和IE浏览器文章去看看如何做。 我们继续在test1这个包下新建一个browser_engine.py文件然后在另外一个包下新建一个test.py文件去测试这个浏览器引擎类是否工作正常。这个浏览器引擎类我们一开始写简单一点只写启动浏览器。
先看看browser_engine.py中的代码
4.1 代码实现
4.1.1 browser_engine.py
4.1.2 test.py
4.2 参考代码
4.2.1 browser_engine.py
# codingutf-8from selenium import webdriverclass BrowserEngine(object):定义一个浏览器引擎类根据browser_type的值去控制启动不同的浏览器这里主要是IEFirefox, Chromedef __init__(self, driver):self.driver driverbrowser_type IE # maybe Firefox, Chrome, IEdef get_browser(self):通过if语句来控制初始化不同浏览器的启动默认是启动Chrome:return: driverif self.browser_type Firefox:driver webdriver.Firefox()elif self.browser_type Chrome:driver webdriver.Chrome()elif self.browser_type IE:driver webdriver.Ie()else: driver webdriver.Chrome()driver.maximize_window()driver.implicitly_wait(10)return driver
4.2.2 test.py
再看看test.py代码进行测试更改browser_engine.py中browser_type的值去测试三大浏览器是否启动正常。
# codingutf-8
from test1.browser_engine import BrowserEngineclass TestBrowserEngine(object):def open_browser(self):browserengine BrowserEngine(self)driver browserengine.get_browser()tbe TestBrowserEngine()
tbe.open_browser()
4.3 运行结果
再看看test.py代码进行测试更改browser_engine.py中browser_type的值去测试三大浏览器是否启动正常。
运行代码后控制台打印如下图的结果 目前自定义的浏览器引擎类到这里就封装好了只支持打开不同浏览器需要手动修改引擎类中browser_type的值。看起来功能简单但是我们只是需要学习这种做事的方式和思维在下一个部分框架设计的时候我会再告诉大家如何去加强这个引擎类
的功能到时候去修改配置文件中的浏览器类型而不是修改代码中的字段。通过修改配置文件从而去打开不同浏览器并开始测试相关脚本。