- Selenium + Python 自动化测试环境搭建
- 怎样开始用selenium进行自动化测试(个人总结)
- 关于学习selenium进行自动化测试所需要学的知识
- Selenium 使用介绍
- Selenium 命令列表
- Selenium 快速入门
- Web软件测试工具Selenium:如何选取元素
- Selenium RC在浏览器兼容性测试的用武之地
- selenium开源功能测试工具
- Selenium执行测试脚本稳定性的一些经验分享交流
- Web测试工具Selenium入门心得
- Selenium自动化测试用例设计注意事项(一)
- 基于TestNG 与Selenium 的自动化测试设计与实施
- 毁三观的 Selenium 自动化测试框架
- Selenium自动化测试用例设计注意事项(二)
- 用Selenium实现页面自动化测试
- Selenium实战:.Net下的自动化测试搭建
- 用 Selenium 自动化验收测试(一)
- 用 Selenium 自动化验收测试(三)
- 使用开源工具SeleniumRC进行功能测试
- 用 Selenium 自动化验收测试(二)
- 用 Selenium 自动化验收测试(四)
- 应用Selenium和Ruby进行面向领域的Web测试
- WebTest比拼Selenium:模拟和真实浏览器上的测试
- Selenium实例:AJAX自动化测试应用
- Selenium-集成测试工具
- 基于FireFox的测试插件 – Selenium IDE
- 基于Selenium和VSTT的网站测试自动化系统
- selenium参考手册中文翻译
- 《Selenium2自动化测试实战–基于Python语言》
- selenium webdriver (python) 第三版
- selenium-webdriver(python) (十六) –unittest 框架
- selenium webdriver (python) 第一版PDF
- selenium-webdriver(python) (十五) — 鼠标事件
- selenium-webdriver(python) (十四) — webdriver原理
- selenium-webdriver(python) (十三) — cookie处理
- 轻松自动化—selenium-webdriver(python) (十二)
- 轻松自动化—selenium-webdriver(python) (十一)
- 轻松自动化—selenium-webdriver(python) (十)
- 轻松自动化—selenium-webdriver(python) (八)
- 轻松自动化—selenium-webdriver(python) (七)
- 轻松自动化—selenium-webdriver(python) (六)
- 轻松自动化—selenium-webdriver(python) (五)
- 轻松自动化—selenium-webdriver(python) (三)
- 轻松自动化—selenium-webdriver(python) (二)
- 轻松自动化—selenium-webdriver(python) (一)
- 译:selenium webdriver (python)
- 菜鸟学自动化测试(九)—-WebDirver
- 菜鸟学自动化测试(八)—-selenium 2.0环境搭建(基于maven)
- Selenium3.0 自动化测试
- JavaScript(Node.js)+ Selenium自动化测试
- selenium操作隐藏的元素
- selenium处理select标签的下拉框
- 在Python中实现PageFactory模式
- 《selenium2 Java 自动化测试实战(第二版)》 更新2016.5.3
- 基于selenium的pyse自动化测试框架
- 自动化基础普及之selenium是啥?
- 在做自动化测试之前你需要知道的
- 自动化测试如何解决验证码的问题
- 菜鸟学自动化测试(六)—-selenium 命令之文字范本匹配
- 菜鸟学自动化测试(五)—–selenium命令之定位页面元素
- 菜鸟学自动化测试(四)—-selenium 命令之验证页面元素
- 菜鸟学自动化测试(三)—-selenium 命令
- 菜鸟学自动化测试(二)—-selenium IDE 功能扩展
- 菜鸟学自动化测试(一)—-selenium IDE
- selenium RC 环境配置
- Selenium的基本使用
- 敏捷自动化测试
- Web测试工具Selenium入门心得
selenium-webdriver(python) (十四) — webdriver原理
之前看乙醇视频中提到,selenium 的ruby 实现有一个小后门,在代码中加上$DEBUG=1 ,再运行脚本的过程中,就可以看到客户端请求的信息与服务器端返回的数据;觉得这个功能很强大,可以帮助理解webdriver的运行原理。
后来查了半天,python并没有提供这样一个方便的后门,不过我们可以通过代理的方式获得这些交互信息;
一、需要安装java 虚拟机与selenium-server-standalone ,参考 《selenium + python自动化测试环境搭建》第7、8操作:
二、通过下面命令启动服务:
C:\selenium>java -jar selenium-server-standalone-2.33.0.jar
在命令结尾加 >d:\log.txt 可以将命令信息存入文件,但信息很少。
然后运行下面的自动化脚本:
#coding = utf-8import timefrom selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilities driver = webdriver.Remote(desired_capabilities=DesiredCapabilities.CHROME) driver.get("http://www.youdao.com") driver.find_element_by_name("q").send_keys("hello") driver.find_element_by_name("q").send_keys("key.ENTER") driver.close()
webdriver原理:
1. WebDriver 启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为web driver的remote server。
2. Client 端通过CommandExcuter 发送HTTPRequest 给remote server 的侦听端口(通信协议: the webriver wire protocol)
3. Remote server 需要依赖原生的浏览器组件(如:IEDriver.dll,chromedriver.exe),来转化转化浏览器的native调用。
查看命令提示符下的运行日志:
咋一看很乱,慢慢分析一下就发现很有意思!结合上面的脚本分析
--------------------------------------------------------------------------------------->java -jar selenium-server-standalone-., :::: INFO - Java: Oracle Corporation -:: INFO - OS: Windows XP :: INFO - v2., with Core v2.:: INFO - RemoteWebDriver instances should connect to: http::/wd/:: INFO - Version Jetty/:: INFO - Started HttpContext[/selenium-server/driver,/selenium-/:: INFO - Started HttpContext[/selenium-server,/selenium-:: INFO - Started HttpContext[/,/:: INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@:: INFO - Started HttpContext[/wd,/:: INFO - Started SocketListener on .::: INFO ---------------------------------------------------------------------------------------:: INFO - Executing: [new session: {platform=ANY, javascriptEnabled==chrome, version=}] at URL: /:: INFO - Creating a new session Capabilities [{platform==, browserName=chrome, version=][INFO]: received Webriver request: GET /][INFO]: sending Webriver response: : : : : : : ][INFO]: received Webriver request: POST /: : : : ][INFO]: Launching chrome: ettings\Application ata\Google\Chrome\Application\chrome.exe-port= --no-first-run --enable-logging --logging-level= --user-data-dir=\OCUME~\AMINI~\LOCALS~\Temp\scoped_dir1808_7550C:\OCUME~~\LOCALS~\Temp\scoped_dir1808_26821\internals data:text/html;charset=utf-][INFO]: sending Webriver response: ][INFO]: received Webriver request: GET /session/][INFO]: sending Webriver response: : : : : : : : : : : : : : : : : : : :: INFO - Done: /:: INFO -/session/ac5b2c71-5b1a-469e-814c-:: INFO - Done: /session/ac5b2c71-5b1a-469e-814c-:: INFO - Executing: [get: http:b2c71-5b1a-469e-814c-fdd09a2061fc/][INFO]: received Webriver request: POST /session//: ][INFO]: waiting ][INFO]: done waiting ][INFO]: waiting ][INFO]: done waiting ][INFO]: sending Webriver response: : : : :: INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/--------------------------------------------------------------------------------------:: INFO - Executing: [find element: By.name: q] at URL: /session/-5b1a-469e-814c-fdd09a2061fc/][INFO]: received Webriver request: POST /session//: : ][INFO]: waiting ][INFO]: done waiting ][INFO]: waiting ][INFO]: done waiting ][INFO]: sending Webriver response: : : : :: INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/:: INFO - Executing: [send keys: //ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element//][INFO]: received Webriver request: POST /session//element/:/: : [ , , , , ][INFO]: waiting ][INFO]: done waiting ][INFO]: waiting ][INFO]: done waiting ][INFO]: sending Webriver response: : : : :: INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element//:: INFO - Executing: [find element: By.name: q] at URL: /session/-5b1a-469e-814c-fdd09a2061fc/][INFO]: received Webriver request: POST /session//: : ][INFO]: waiting ][INFO]: done waiting ][INFO]: waiting ][INFO]: done waiting ][INFO]: sending Webriver response: : : : :: INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/:: INFO - Executing: [send keys: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element//][INFO]: received Webriver request: POST /session//element/:/: : [ , , , , , , , , ][INFO]: waiting ][INFO]: done waiting ][INFO]: waiting ][INFO]: done waiting ][INFO]: sending Webriver response: : : : :: INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/element//:: INFO - Executing: [close window] at URL: /session/ac5b2c71-5b1a--814c-fdd09a2061fc/][INFO]: received Webriver request: ELETE /session//~\ADMINI~\LOCALS~\Temp\scoped_dir1808_7550 C:\DOCUME~~\LOCALS~][INFO]: sending Webriver response: : : : :: INFO - Done: /session/ac5b2c71-5b1a-469e-814c-fdd09a2061fc/window
request 请求 / response 应答
一次请求会对应一次应答
POST/GET 是请求(request)两种类型;关于两种请求方式的类别参考其它资料
200 、203 是 HTTP请求返回的状态码,200表示成功;
sessionid :每一个访问服务器的客户端,都要先得到服务器端分配的一个sessionid ,就像通行证一样,只有得到sessionid的客户端才能向服务器请求想要的数据。
其它还包括操作系统版本,浏览器类型、URL、字符类型等非常详细的记录。熟悉HTTP ,了解TCP 的三次握手四次挥手,相信你对浏览器的交互与webdriver原理会有更深入的认识。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论