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

HTTP Method URI Template POST /session

JSON参数:

  • 一个自定义的session的配置对象
  • 一个默认的session的配置对象
    返回值:
  • 一个描述当前session配置的对象
  • 下面通过几个具体的例子介绍HTTP request的具体内容:

    HTTP request类型

    HTTP request的类型是GET或者POST

    GET request

    通常是一些查询命令,用于获取页面中Web元素的信息,例如:**

  • text
  • get_attribute(name)
  • is_displayed()
  • is_selected()
  • 以检查一个元素是否已在当前页面中加载成功 —— is_displayed()为例

    HTTP Method URI Template GET /session/{session id}/element/{id}/displayed

    URI参数:

  • {session id} :Session ID 用于标识接收这条命令的Session
  • {id}:元素的id,标识执行这条命令的元素
    返回值:
  • boolean类型,加载成功返回true,加载失败返回false
  • POST request

    通常是一些操作命令,用于Web元素的交互操作,例如:

  • click()
  • find_element_by_id(id)
  • find_elements_by_id(id)
  • 以点击一个元素 —— element.click()为例

    HTTP Method URI Template POST /session/{session id}/element/{id}/click

    URI参数:

  • {session id} :Session ID 用于标识接收这条命令的Session
  • {id}:元素的id,标识执行这条命令的元素
    返回值:
  • 元素对应的JSON对象

  • HTTP request参数

    URI参数(上述例子中已经提到过)

  • {session id} :Session ID 用于标识接收这条命令的Session
  • {id}:元素的id,标识执行这条命令的元素
    JSON参数
  • 这里说明下JSON参数,以获取一个元素为例 —— find_element

    HTTP Method URI Template POST /session/{session id}/element

    这里有URL参数{session id}
    JSON参数

  • using - {string} 定位策略
  • value - {stirng} 对应的目标值
  • 一个使用XPath策略获取元素的python脚本写法:

    login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

    可用的策略有:

    State Keyword CSS selector “css selector” Link text selector “link text” Partial link text selector “partial link text” XPath “xpath”

    HTTP request返回值

    • 一个普通值类型
    • 一个JSON对象

    普通值类型

    以获取当前页面的标题 —— driver.title为例

    HTTP Method URI Template POST /session/{session id}/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(获取页面标题)为例:

    HTTP Method URI Template POST /session/{session id}/title

    返回的是页面Document的top-level browsing context的title,等同于调用window.top.document.title
    这个过程中Remote End(Driver的Server)对HTTP request做出响应的执行步骤是:

    1. 如果当前的top-level browsing context是未打开状态,返回相应的错误代码和错误信息
    2. 处理用户提示,如果是一个错误提示,则返回它的提示内容
    3. 将当前top-level browsing context中激活状态页面的Title值赋值给title
    4. 将数据处理成JSON对象
    5. 将title的值赋给“value”
    6. 返回执行成功标志和数据
    1 0
    原创粉丝点击