51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

[转贴] 自动化基础普及之selenium是啥?

[复制链接]
  • TA的每日心情
    擦汗
    3 小时前
  • 签到天数: 1046 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2016-9-27 10:50:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    Selenium 并不像QTP那样让人一下子就明白是什么?它是编程人员的最爱,但它却对测试新手产生了很大的阻碍。
    Selenium 是啥?
    Selenium RC是啥?
    Webdriver 又是啥?
    RC 和 Webdriver 是啥关系?
    Webdriver 和编程语言啥关系?
    Selenium 能并行执行脚本嘛?
    Selenium 能做移动端自动化么?
    这里虫师用简单方式,告诉你,他们错综复杂的关系。理顺了它们之间的关系才能真正使用它。
    Selenium 是什么?
    Selenium 是web自动化测试工具集,包括IDE、Grid、RC(selenium 1.0)、WebDriver(selenium 2.0)等。
    Selenium IDE 是firefox浏览器的一个插件。提供简单的脚本录制、编辑与回放功能。
    Selenium Grid 是用来对测试脚步做分布式处理。现在已经集成到selenium server 中了。
    RC和WebDriver 更多应该把它看成一套规范,在这套规范里定义客户端脚步与浏览器交互的协议。以及元素定位与操作的接口。
    WebDriver是什么?
    对于刚接触selenium自动化测试的同学来说不太容易理解API是什么,它到底和编程语言之是什么关系。
    http://www.w3.org/TR/2013/WD-webdriver-20130117/
    当初,在刚学selenium (webdriver)的时候花了一个星期来翻译这个文档,后来也没弄明白,它是啥。其实它就是一层基础的协议规范。
    假如说:Webdriver API(接口规范)说,我们要提供一个页面元素id的定位方法。

    Ruby的webdriver模块是这么实现的:
    1. require "selenium-webdriver"   #导入ruby版的selenium(webdriver)

    2. find_element(:id, "xx")    #id定位方法
    复制代码
    C#的webdriver模块是这么实现的:
    1. using OpenQA.Selenium;
    2. using OpenQA.Selenium.Firefox;  //导入C#版的selenium(webdriver)

    3. FindElement(By.Id("xx"))   //id定位方法
    复制代码
    python的webdriver模块是这么实现的:
    1. from  selenium import webdriver    #导入python版的selenium(webdriver)

    2. find_element_by_id("xx")   #id定位方法
    复制代码
    Java的webdriver模块是这么实现的:
    1. import org.openqa.selenium.*;
    2. import org.openqa.selenium.firefox.FirefoxDriver;//导入java版的selenium(webdriver)

    3. findElement(By.id("xx"))    //id定位方法
    复制代码
    Robot Framework + selenium
    因为Robot Framework 对于底层过于封装,所以,我们看不到语言层面的方法定义。所以,Robot Framework 提供给我们的方法如下:
    1、导入Robot Framework 版本的selenium(webdriver)

    2、使用id方法
    Click element
    Id=xx

    需要说明的是 webdriver API 只提供了web页面操作的相关规范,比如元素定位方法,浏览器操作,获取web页元素属性等。



    Webdriver  如何组织和执行用例?

        对不起,webdriver 不会。

    把写好这些操作页面元素的方法(用例)组织起来执行并输入测试结果,是由编程语言的单元测试框架去完成的。如java 的junit和testng单元测试框架,python 的unittest单元测试框架等。


    Selenium RC 和WebDriver 什么关系?

    RC和 WebDriver 类似,都可以看做是一套操作web页面的规范。当然,他们的工作原理不一样。

    selenium RC 在浏览器中运行 JavaScript 应用,使用浏览器内置的 JavaScript 翻译器来翻译和执行selenese 命令(selenese 是 selenium 命令集合) 。

    WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器。WebDriver 针对各个浏览器而开发,取代了嵌入到被测 Web 应用中的 JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript 安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver 还利用操作系统级的调用模拟用户输入。

    看样子webdriver 更牛B一些。为了保持向兼容,所以selenium 2.0中,RC 和webdriver 并存,但说起selenium 2.0 一般指的是webdriver 。



    并行与分布式的区别

    有同学好奇如何并行的执行测试用例,并行要求“同时”执行多条用例,这个也是由编程语言的多线程技术实现的。

    你会问Selenium Grid 不是可以实现分布式执行么? 分布式的概念是写好一条用例可以调用不同的平台执行,如 A电脑上有一个测试用例,可以调用B电脑(linux)的 Firefox浏览器来跑A电脑上的测试用例;也可以调用C电脑(windows)的 Chrome浏览器来跑A电脑上的测试用例。这是分布式的概念。

    Selenium如何能做移动端测试么?
    这里我们以python 语言为例。
    1. from selenium import webdriver

    2. driver= webdriver.Chrome()   #获取浏览器驱动。拿到浏览器驱动driver 才能操作浏览器所打找的页面上的元素。
    复制代码
    我们把驱动展开是这样的
    1. from selenium import webdriver

    2. driver = webdriver.Remote(
    3.                        command_executor='http://127.0.0.1:4444/wd/hub',
    4.                        desired_capabilities={'platform': 'ANY',
    5.                                          'browserName':chrome,
    6.                                           'version': '',
    7.                                           'javascriptEnabled': True
    8.                                           })
    复制代码
    驱动里包含了一些参数,代理服务器(URL)平台,浏览器 ,浏览器版本等。
    移动端的自动化测试工具Appium
    从本质上来讲,appium同样继承了WebDriver  API的接口规范。Appium 同样是支持多种编程语言的。这里仍然以python 为例子。
    1. from appium import webdriver  #导入python版的 appium(webdriver)模块

    2. #定义驱动的参数
    3. desired_caps = {}
    4. desired_caps['platformName'] = 'Android'
    5. desired_caps['platformVersion'] = '4.2'
    6. desired_caps['deviceName'] = 'Android Emulator'
    7. desired_caps['appPackage'] = 'com.android.calculator2'
    8. desired_caps['appActivity'] = '.Calculator'

    9. driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    复制代码
    这一次因为我们操作的是移动端的安卓。所以我们驱动的参数里就要指定平台是'Android' ,版本是4.2 等信息。拿到驱动后,就可以操作安卓上的APP了。

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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-14 12:30 , Processed in 0.058514 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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