工作学习笔记

Selenium源码学习

2019-06-29  本文已影响0人  Megahorn
参考
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
上一篇 下一篇

猜你喜欢

热点阅读