目录分析:
安装后,在Python安装目录Python27\Lib\site-packages\selenium-xx\selenium找到selenium的文件夹。
第一层结构:
__init__.py | 只做一件事,导入selenium.py文件: from selenium import selenium | 由此可见Selenium是个包 |
selenium.py | 导入httplib,urllib模块,在Python3上面跑
| 定义了selenium类,包括对象的抽象的定位和操作。 httplib as http_client urllib as urllib_parse |
Common文件夹 | __init__.py exceptions.py | 定义了各种异常,对异常的处理都是pass。 |
webdriver文件夹 | common文件夹; IE等各种平台的文件夹; remote文件夹; support文件夹; |
|
Selenium.py文件-(定义selenium类):
def click(self,locator): self.do_command("click", [locator,]) | 所有的操作都类似这个方法,都调用了do_command方法 |
def do_command(self, verb, args): conn = http_client.HTTPConnection(self.host, self.port, timeout=30) try: body = 'cmd=' + urllib_parse.quote_plus(unicode(verb).encode('utf-8')) for i in range(len(args)): body += '&' + unicode(i+1) + '=' + \ urllib_parse.quote_plus(unicode(args[i]).encode('utf-8')) if (None != self.sessionId): body += "&sessionId=" + unicode(self.sessionId) headers = { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" } conn.request("POST", "/selenium-server/driver/", body, headers)
response = conn.getresponse() data = unicode(response.read(), "UTF-8") if (not data.startswith('OK')): raise Exception(data) return data finally: conn.close() | 主要用了httplib,urllib两个包作为基础,模拟HTTP请求。 |
第二层结构之Common文件夹:定义了各种异常,对异常的处理都是pass。
第二层结构之webdriver文件夹:
__init__.py
导入各个平台的webdriver.py,以及firefox.firefox_profile和chrome.options |
|
导入remote.webdriver |
|
导入common的desired_capabilities,action_chains,touch_actions,proxy等模块文件 |
|
第三层结构(selenium\webdriver)各平台的文件夹:
IE | __init__.py | 没有任何代码 |
service.py |
| |
webdriver.py |
| |
|
|
|
|
|
|
|
|
|