Web自动化系列--Selenium WebDriver详细介绍
来源:互联网 发布:如何弄死一个淘宝店铺 编辑:程序博客网 时间:2024/06/07 04:17
这篇主要介绍Selenium WebDriver详细的工作过程,介绍到通信层,Browser Driver的工作原理不去做深入探究。
从上一篇的一个自动化脚本实例开始:
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()driver.get("http://www.python.org")assert "Python" in driver.titleelem = driver.find_element_by_name("q")elem.send_keys("pycon")elem.send_keys(Keys.RETURN)assert "No result found." not in driver.page_sourcedriver.close()
这个脚本模拟的用户操作,在上一篇中已经介绍过了,这里不再赘述。
自动化脚本中的每一个Selenium Command都会创建一个带有Path的HTTP request。
当自动化脚本执行的时候,第一个HTTP request会创建一个新的Session,接下来对浏览器的操作将通过这个Session来执行。
创建的Session ID将用于标识后续的自动化脚本都在同一个Session中执行。
创建一个新的Session
JSON参数:
一个自定义的session的配置对象
一个默认的session的配置对象
返回值:
一个描述当前session配置的对象
下面通过几个具体的例子介绍HTTP request的具体内容:
HTTP request类型
HTTP request的类型是GET或者POST
GET request
通常是一些查询命令,用于获取页面中Web元素的信息,例如:**
以检查一个元素是否已在当前页面中加载成功 —— is_displayed()为例
URI参数:
{session id} :Session ID 用于标识接收这条命令的Session
{id}:元素的id,标识执行这条命令的元素
返回值:
boolean类型,加载成功返回true,加载失败返回false
POST request
通常是一些操作命令,用于Web元素的交互操作,例如:
以点击一个元素 —— element.click()为例
URI参数:
{session id} :Session ID 用于标识接收这条命令的Session
{id}:元素的id,标识执行这条命令的元素
返回值:
元素对应的JSON对象
HTTP request参数
URI参数(上述例子中已经提到过)
{session id} :Session ID 用于标识接收这条命令的Session
{id}:元素的id,标识执行这条命令的元素
JSON参数
这里说明下JSON参数,以获取一个元素为例 —— find_element
这里有URL参数{session id}
JSON参数:
using - {string} 定位策略
value - {stirng} 对应的目标值
一个使用XPath策略获取元素的python脚本写法:
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")
可用的策略有:
HTTP request返回值
- 一个普通值类型
- 一个JSON对象
普通值类型
以获取当前页面的标题 —— driver.title为例
返回值是:一个{string} —— 当前页面的Title属性的值
JSON对象
以上述的获取一个元素 —— find_element为例
返回值是:目标位置的一个WebElement JSON对象
【Browser Driver】
Browser Driver一般是一个EXE(可执行)程序,或者浏览器的扩展程序,它使用HTTP Server持续监听Selenium2 Commands,其主要功能:
- 从客户端(执行自动化脚本的计算机)接收HTTP request
- 确定Selenium Commands对应的用户操作
- 发送操作信息到浏览器
- 获取浏览器返回的执行状态信息
- 发送执行状态信息到客户端
这里说明下“Selenium Commands对应的用户操作”具体的内容,以driver.title(获取页面标题)为例:
返回的是页面Document的top-level browsing context的title,等同于调用window.top.document.title。
这个过程中Remote End(Driver的Server)对HTTP request做出响应的执行步骤是:
- 如果当前的top-level browsing context是未打开状态,返回相应的错误代码和错误信息
- 处理用户提示,如果是一个错误提示,则返回它的提示内容
- 将当前top-level browsing context中激活状态页面的Title值赋值给title
- 将数据处理成JSON对象
- 将title的值赋给“value”
- 返回执行成功标志和数据
- Web自动化系列--Selenium WebDriver详细介绍
- 轻松自动化---selenium-webdriver(python) 系列教程
- 自动化测试--selenium-webDriver
- 【已上架】selenium 2 webdriver自动化开发系列视频
- 基于 Selenium WebDriver 的 Web 应用自动化测试
- web自动化测试,selenium,需要下载chrome-webdriver
- Selenium-webdriver系列教程
- Selenium webdriver介绍
- 自动化测试selenium webdriver启动
- 初识web自动化--webdriver
- selenium webdriver的断言介绍
- 自动化测试工具 Selenium WebDriver 入门教程
- selenium webdriver junit自动化测试架构
- Selenium WebDriver 自动化测试截图问题
- 自动化测试工具 Selenium WebDriver 入门教程
- 轻松自动化---selenium-webdriver(python) (一)
- 轻松自动化---selenium-webdriver(python) (二)
- 轻松自动化---selenium-webdriver(python) (一)
- Linux下安装QT之版本qt-4.6.3
- struts2 中,如何覆盖默认的错误消息
- 将rdd存储到本地的一个文件中
- Java基础知识网络编程(TCP练习)
- mysql 给指定用户指定数据库
- Web自动化系列--Selenium WebDriver详细介绍
- ReactNative NodeJs v5.7.0稳定版官方下载
- Java集合---ConcurrentHashMap原理分析
- 今天发现一个JQ插件库网站
- Activity生命周期和启动模式
- Junit 4.7 MethodRule
- mybatis 关于 传入参数为集合list和map的写法
- IFrame带来的Session问题
- maven打包,问题