Selenium源码学习

作者: Megahorn | 来源:发表于2019-06-29 08:23 被阅读0次
    参考
    Python+Selenium
    https://www.cnblogs.com/simple-free/category/1161961.html
    
    源码
    https://blog.csdn.net/ant_ren/article/details/7970793
    

    不拾人牙慧,看了下Python源码画个图
    只画了Chrome的情况,其他浏览器也是类似的继承/持有关系,以后有时间再研究@TODO
    类图和时序图都是参考Selenium3.14.1 Python版本源码

    Selenium3.14.1
    初始化webdriver时(即调用以下语句初始化一个"浏览器"时)都发生了什么
    webdriver.Chrome(chrome_options=chrome_options)
    
    1. 初始化并持有一个common.service.Service,实际是从系统获取一个未被占用的端口,调用subprocess.Popen()启动了一个chromedriver.exe
    2. 初始化并持有一个chrome.remote_connection.ChromeRemoteConnection,作为一个command executor,可以通过这个executor向Step1的chromedriver发送各种指令(get,find_element之类的)
    3. 完整的初始化webdriver自己,通过self.execute(Command.NEW_SESSION, parameters)初始化一个session@TODO
    4. 其他
    通过webdriver调用get,find_element之类的命令时,都发生了什么(以get为例)
    1. WebDriver通过自身持有的command executor,调用self.command_executor.execute('GET', params)
    2. command_executor(即ChromeRemoteConnection实例)通过HTTP请求的方式,向本地已启动的已知端口的chromedriver.exe的Service发送请求,获取返回值
    3. WebDriver将返回值返回给调用者

    下面是时序图,部分非关键步骤省略


    Selenium3.14.1时序.png

    相关文章

      网友评论

        本文标题:Selenium源码学习

        本文链接:https://www.haomeiwen.com/subject/isagqctx.html