zoukankan      html  css  js  c++  java
  • Selenium2Library源码中browser的传递

    C:Python27Libsite-packagesSelenium2Librarykeywords\_element.py

    在def _element_find(self, locator, first_only, required, tag=None)中第一条语句为
            browser = self._current_browser()

    通过eclipse的pydev插件跟进代码发现此处调用的是_BrowserManagementKeywords类中的_current_browsers()方法,但是研究了很久_ElementKeywords与_BrowserManagementKeywords之间并无继承关系,这个方法怎么能调用成功呢?

    后来研究发现在Selenium2Library包的__init__.py文件中Selenium2Library这个class继承了keywords包下所有的类,这也是为什么在使用Selenium2Library时只需要引用这一个包就可以使用所有关键字的原因了。从此处去分析,因为self代表的是实例本身而不是类本身。我们在实际使用过程中生成的Selenium2Library的实例,而这个实例的self是能够调用所有关键字中的方法的,也就是说此处是Selenium2Library().current_browser(),调用成功。

      为了验证这个思路我创建了一个自己的Python library继承自_ElementKeywords

    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'

    这说明在_ElementKeywords 的实例是不能够直接调用_current_brwser方法的。

    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()

    运行以上代码,运行结果为输出

    this is design

    this is review

    也就是说Python语法支持以上猜想

    有了这两个论证,基本上能够确认这个猜想是正确的。而且Selenium2Library代码中除了browser的获取log的输出要采用了同样的方法,调用了_LoggingKeywords中的方法进行log的记录。

  • 相关阅读:
    HTTP Header 详解
    面试题----网页/应用访问慢突然变慢,如何定位问题
    PHP实现斐波那契数列
    常见的HTTP返回状态值
    通过实例理解单列索引、多列索引以及最左前缀原则
    Btree索引和Hash索引
    遍历和删除文件夹
    面试题之----禁掉cookie的session使用方案
    面试题之----写个函数来解决多线程同时读写一个文件的问题
    heredoc
  • 原文地址:https://www.cnblogs.com/tina-cherish/p/7689947.html
Copyright © 2011-2022 走看看