记录一下自己对selenium源码的一些思考,花了几天晚上debug才发现的一些细节~ 记录下,错误之处欢迎拍砖~
三个角色
Client:我们的selenium脚本
Session:chromedriver.exe的一个实例(ChromeDriverService)与浏览器通话的一个实例
Browser:真实的浏览器
- Client 发送请求给Session(做一些操作,比如打开浏览器,找元素)
- Session和浏览器通信 并返回请求的response给client
也就是说,Selenium当中是通过把我们发送的操作封装成一个个命令(Command),并所带的参数封装成JSON OBJECT 打包成request(也就是Json wire protocol协议)发送到DriverService的restful接口。
几个概念
- 浏览器的一些初始化配置(ChromeOption)最终ChromeOption需要转化成capabililty类
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
- ChromeDriverService:通过启动可执行程序 chromedriver.exe实例化一个DriverService,用来和浏览器通信的实例
- executable:chromedriver.exe文件
- port:获取系统空闲的一个port
- args:TBD
- enviroment:TBD
public ChromeDriver(ChromeDriverService service, Capabilities capabilities) {