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的记录。