selenium 从某一方面来讲其实就是一个web服务器。
我们启动webdriver服务时,会在webdriver服务里生成对应的session,只要服务启动起来了,无论什么类型的客户端,理论上只要获取到了生成的session,请求时带上此session,应该都是可以和webdriver服务交互的,也就可以操作浏览器了。
当我们selenium脚本执行时,会启动对应浏览器的driver,这个driver其实就是webdriver,启动后会在本地开启一个web服务,默认端口在9515
开启服务后可以本地访问9515的服务
可见时有服务存在的,若此时将服务关闭,此时web页面时反问不到数据的。由此可见,在执行自动化脚本时会启动对应浏览器的driver,生成一个webdriver服务。
我们在执行自动化代码时,例如:
from selenium import webdriverdriver = webdriver.Chrome()
url = 'https://www.baidu.com'
driver.get(url)
get方法对应的api:
此处driver.get()方法,其实就是在我们启动webdriver服务后,访问服务对应的api,例如里面有个/get的api路由,此时访问进去,会触发webdriver里的get方法里对应的代码,可以从源码中查看:
get方法里面其实又执行了Command.GET方法,参数是:{'url':url},代表想要执行的url.后续会通过Command.GET方法告诉浏览器,这里是get方法,去打开对应的网址吧。
element对应的api:
又或者,当我们的脚本中需要访问的api方法是elemen时,例如:
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
url = 'https://www.baidu.com'
driver.get(url)
res = driver.find_element(By.ID,'xxx')
当我们调用webdriver对应的element方法时,此时会执行被启动的webdriver服务里面的Command.FIND_ELEMETN方法:
此时webdriver通过http协议告诉浏览器,你去执行相关的查找元素的方法吧,参数如上,浏览器接收到信息后会调用js方法:document.getElementById('xxx')方法,并返回webdriver服务相关的执行结果,webdriver再将执行结果返回我们的客户端脚本。
其他方法原理类似
appium:其实就是将selenium2的那一套api做了封装,用在移动端,所以slenium和appium因为webdriver的session机制存在,所以可以跨平台。

-
test script也就是我们client端 ,客户端会传递 Desired Capabilities 给 Appium Server 创建一个会话.Appium Server 会调用 appium-uiautomator2-driver 同时将 UiAutomator2 Server 的两个 apk 安装到测试设备上.
-
脚本命令通过webdriver协议解析,解析后的指令传给Appium Server。
-
appium server会把请求转发给中间件Bootstrap.jar ,它是用java写的,安装在手机上.Bootstrap监听4724端口并接收appium 的命令,最终通过调用UiAutomator的命令来实现。
-
最后Bootstrap将执行的结果返回给appium server。
-
appium server再将结果返回给 appium client。