Web自动化系列--Selenium WebDriver详细介绍

这篇主要介绍Selenium WebDriver详细的工作过程,介绍到通信层,Browser Driver的工作原理不去做深入探究。

上一篇的一个自动化脚本实例开始:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No result found." not in driver.page_source
driver.close()

这个脚本模拟的用户操作,在上一篇中已经介绍过了,这里不再赘述。
自动化脚本中的每一个Selenium Command都会创建一个带有Path的HTTP request。
当自动化脚本执行的时候,第一个HTTP request会创建一个新的Session,接下来对浏览器的操作将通过这个Session来执行。
创建的Session ID将用于标识后续的自动化脚本都在同一个Session中执行。

###创建一个新的Session

HTTP MethodURI 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 MethodURI 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 MethodURI 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 MethodURI 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']")
    

    可用的策略有:

    StateKeyword
    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 MethodURI 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值