Webdriver可以这样理解:客户端脚本(java, python, ruby,c#)不能直接与浏览器通信,但可以用WebService作为通讯翻译器,WebService把客户端代码翻译成浏览器可以识别的代码(如js)。
- 客户端(也就是测试脚本)创建1个session,在该session中通过http请求向WebService发送restful的请求。
- WebService翻译成浏览器懂得脚本传给浏览器。
- 浏览器把执行的结果返回给WebService。
- WebService把返回的结果做了一些封装(一般都是json格式)。
- 然后返回给client,根据返回值就能判断对浏览器的操作是不是执行成功。
总结下来核心就是Webdriver是按照server–client的架构设计,server端就是remote server,可以是任意的浏览器:脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应; client端简单说来就是我们的测试代码:测试代码表示的是执行的动作行为,比如启动浏览器,跳转到指定的url等,这些操作本质都是以http请求的方式发送给被server端(也就是被测浏览器),server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息。
原详细解释地址:测开系列Selenium Webdriver Python(20)--Webdriver运行原理 - 知乎
from selenium import webdriver
# 启动chrome
driver = webdriver.Chrome()
# 访问网站百度
driver.get("https://www.baidu.com")
# 窗口最大化
driver.maximize_window()
# 去某宝浪一圈,方便测试回到上一页
driver.get("https://www.taobao.com")
# 回到上一页,等同点击左箭头
driver.back()
# 去下一页,等同点击右箭头.forward就是向前的意思
driver.forward()
# 刷新当前页面,等同点击刷新按钮
driver.refresh()
# 获取当前窗口的标题
print('获取当前窗口的标题',driver.title)
# 获取当前窗口的网址
print('获取当前窗口的网址',driver.current_url)
# 获取当前窗口的句柄,就是当前窗口的id
print('获取当前窗口的句柄',driver.current_window_handle)
# 结束会话
# driver.quit()
获取当前窗口的标题 淘宝网 - 淘!我喜欢
获取当前窗口的网址 https://www.taobao.com/
获取当前窗口的句柄 CDwindow-00BC7B081DBF69F801B09633FCC83F66
# 设置无头模式
chrome_options = Options()
chrome_options.add_argument('--headless') # 浏览器不提供可视化页面. linux下使用
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(getUrl('moniWPSTemplateCenterUrl'))
driver.maximize_window()
from selenium import webdriver
# 启动chrome
driver = webdriver.Chrome()
# 访问网站百度
driver.get("https://www.baidu.com")
# 窗口最大化
driver.maximize_window()
# 去某宝浪一圈,方便测试回到上一页
driver.get("https://www.taobao.com")
# 回到上一页,等同点击左箭头
driver.back()
# 去下一页,等同点击右箭头.forward就是向前的意思
driver.forward()
# 刷新当前页面,等同点击刷新按钮
driver.refresh()
# 获取当前窗口的标题
print('获取当前窗口的标题',driver.title)
# 获取当前窗口的网址
print('获取当前窗口的网址',driver.current_url)
# 获取当前窗口的句柄,就是当前窗口的id
print('获取当前窗口的句柄',driver.current_window_handle)
# 结束会话
# driver.quit()