51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1981|回复: 1
打印 上一主题 下一主题

Selenium WebDriver 详细介绍

[复制链接]
  • TA的每日心情
    无聊
    2022-8-5 09:01
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-3-26 14:30:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    这篇主要介绍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 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做出响应的执行步骤是:

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

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 15:44 , Processed in 0.060546 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表