C:\Python27\Lib\site-packages\Selenium2Library\keywords\_element.pyeclipse
在def _element_find(self, locator, first_only, required, tag=None)中第一條語句爲
browser = self._current_browser()ui
經過eclipse的pydev插件跟進代碼發現此處調用的是_BrowserManagementKeywords類中的_current_browsers()方法,可是研究了好久_ElementKeywords與_BrowserManagementKeywords之間並沒有繼承關係,這個方法怎麼能調用成功呢?this
後來研究發如今Selenium2Library包的__init__.py文件中Selenium2Library這個class繼承了keywords包下全部的類,這也是爲何在使用Selenium2Library時只須要引用這一個包就可使用全部關鍵字的緣由了。今後處去分析,由於self表明的是實例自己而不是類自己。咱們在實際使用過程當中生成的Selenium2Library的實例,而這個實例的self是可以調用全部關鍵字中的方法的,也就是說此處是Selenium2Library().current_browser(),調用成功。url
爲了驗證這個思路我建立了一個本身的Python library繼承自_ElementKeywordsspa
from Selenium2Library.keywords import _ElementKeywords class myselenium(_ElementKeywords): def __init__(self): return "Test"
#Robot *** Settings *** Library Selenium2Library Library mySelenium.myselenium *** Test Cases *** test1 Open Browser http://www.baidu.com ie mySelenium.myselenium.Get WebElement id=su
這個時候運行發現報錯信息爲插件
20171018 23:40:41.680 : INFO : Opening browser 'ie' to base url 'http://www.baidu.com'
20171018 23:41:01.308 : FAIL : AttributeError: 'myselenium' object has no attribute '_current_browser'code
這說明在_ElementKeywords 的實例是不可以直接調用_current_brwser方法的。blog
2.進一步驗證Python語法是否支持我以上的猜測繼承
class tester: def design(self): print "this is design" class leader: def review(self): self.design() print "This is review" class testleader(tester,leader): def __init__(self): self.review() if __name__ == "__main__": l=testleader()
運行以上代碼,運行結果爲輸出ip
this is design
this is review
也就是說Python語法支持以上猜測
有了這兩個論證,基本上可以確認這個猜測是正確的。並且Selenium2Library代碼中除了browser的獲取log的輸出要採用了一樣的方法,調用了_LoggingKeywords中的方法進行log的記錄。