zoukankan      html  css  js  c++  java
  • 自动化基础普及之selenium的解释

    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模块是这么实现的:

    require "selenium-webdriver"   #导入ruby版的selenium(webdriver)
    
    find_element(:id, "xx")    #id定位方法

     

     

    C#的webdriver模块是这么实现的:

     

    using OpenQA.Selenium;
    using OpenQA.Selenium.Firefox;  //导入C#版的selenium(webdriver)
    
    FindElement(By.Id("xx"))   //id定位方法

     

    python的webdriver模块是这么实现的:

    from  selenium import webdriver    #导入python版的selenium(webdriver)
    
    find_element_by_id("xx")   #id定位方法

    Java的webdriver模块是这么实现的:

    import org.openqa.selenium.*;
    import org.openqa.selenium.firefox.FirefoxDriver;//导入java版的selenium(webdriver)
    
    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 语言为例。

    from selenium import webdriver
    
    driver= webdriver.Chrome()   #获取浏览器驱动。拿到浏览器驱动driver 才能操作浏览器所打找的页面上的元素。 

     

    我们把驱动展开是这样的

    复制代码
    from selenium import webdriver
    
    driver = webdriver.Remote(
                           command_executor='http://127.0.0.1:4444/wd/hub',
                           desired_capabilities={'platform': 'ANY',
                                             'browserName':chrome,
                                              'version': '',
                                              'javascriptEnabled': True
                                              }) 
    复制代码

    驱动里包含了一些参数,代理服务器(URL)平台,浏览器 ,浏览器版本等。

     

     

     

    移动端的自动化测试工具Appium 

     

    从本质上来讲,appium同样继承了WebDriver  API的接口规范。Appium 同样是支持多种编程语言的。这里仍然以python 为例子。

    复制代码
    from appium import webdriver  #导入python版的 appium(webdriver)模块
    
    #定义驱动的参数
    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '4.2'
    desired_caps['deviceName'] = 'Android Emulator'
    desired_caps['appPackage'] = 'com.android.calculator2'
    desired_caps['appActivity'] = '.Calculator' 
    
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    复制代码

     

    这一次因为我们操作的是移动端的安卓。所以我们驱动的参数里就要指定平台是'Android' ,版本是4.2 等信息。拿到驱动后,就可以操作安卓上的APP了。

     

  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/gusheng668/p/9689182.html
Copyright © 2011-2022 走看看