qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          自動(dòng)化基礎(chǔ)普及之selenium是什么?

           Selenium 并不像QTP那樣讓人一下子就明白是什么?它是編程人員的最愛,但它卻對(duì)測(cè)試新手產(chǎn)生了很大的阻礙。
            Selenium 是啥?
            Selenium RC是啥?
            Webdriver 又是啥?
            RC 和 Webdriver 是啥關(guān)系?
            Webdriver 和編程語言啥關(guān)系?
            Selenium 能并行執(zhí)行腳本嘛?
            Selenium 能做移動(dòng)端自動(dòng)化么?
            這里蟲師用簡(jiǎn)單方式,告訴你,他們錯(cuò)綜復(fù)雜的關(guān)系。理順了它們之間的關(guān)系才能真正使用它。
            Selenium 是什么?
            Selenium 是web自動(dòng)化測(cè)試工具集,包括IDE、Grid、RC(selenium 1.0)、WebDriver(selenium 2.0)等。
            Selenium IDE 是firefox瀏覽器的一個(gè)插件。提供簡(jiǎn)單的腳本錄制、編輯與回放功能。
            Selenium Grid 是用來對(duì)測(cè)試腳步做分布式處理。現(xiàn)在已經(jīng)集成到selenium server 中了。
            RC和WebDriver 更多應(yīng)該把它看成一套規(guī)范,在這套規(guī)范里定義客戶端腳步與瀏覽器交互的協(xié)議。以及元素定位與操作的接口。
            WebDriver是什么?
            對(duì)于剛接觸selenium自動(dòng)化測(cè)試的同學(xué)來說不太容易理解API是什么,它到底和編程語言之是什么關(guān)系。
            http://www.w3.org/TR/2013/WD-webdriver-20130117/
            當(dāng)初,在剛學(xué)selenium (webdriver)的時(shí)候花了一個(gè)星期來翻譯這個(gè)文檔,后來也沒弄明白,它是啥。其實(shí)它就是一層基礎(chǔ)的協(xié)議規(guī)范。
            假如說:Webdriver API(接口規(guī)范)說,我們要提供一個(gè)頁面元素id的定位方法。
            Ruby的webdriver模塊是這么實(shí)現(xiàn)的:
          require "selenium-webdriver"   #導(dǎo)入ruby版的selenium(webdriver)
          find_element(:id, "xx")    #id定位方法
            C#的webdriver模塊是這么實(shí)現(xiàn)的:
          using OpenQA.Selenium;
          using OpenQA.Selenium.Firefox;  //導(dǎo)入C#版的selenium(webdriver)
          FindElement(By.Id("xx"))   //id定位方法
            python的webdriver模塊是這么實(shí)現(xiàn)的:
          from  selenium import webdriver    #導(dǎo)入python版的selenium(webdriver)
          find_element_by_id("xx")   #id定位方法
            Java的webdriver模塊是這么實(shí)現(xiàn)的:
          import org.openqa.selenium.*;
          import org.openqa.selenium.firefox.FirefoxDriver;//導(dǎo)入java版的selenium(webdriver)
          findElement(By.id("xx"))    //id定位方法
          Robot Framework + selenium
            因?yàn)镽obot Framework 對(duì)于底層過于封裝,所以,我們看不到語言層面的方法定義。所以,Robot Framework 提供給我們的方法如下:
            1、導(dǎo)入Robot Framework 版本的selenium(webdriver)
            2、使用id方法
            Click element
            Id=xx
            需要說明的是 webdriver API 只提供了web頁面操作的相關(guān)規(guī)范,比如元素定位方法,瀏覽器操作,獲取web頁元素屬性等。
           Webdriver  如何組織和執(zhí)行用例?
            對(duì)不起,webdriver 不會(huì)。
            把寫好這些操作頁面元素的方法(用例)組織起來執(zhí)行并輸入測(cè)試結(jié)果,是由編程語言的單元測(cè)試框架去完成的。如java 的junit和testng單元測(cè)試框架,python 的unittest單元測(cè)試框架等。
            Selenium RC 和WebDriver 什么關(guān)系?
            RC和 WebDriver 類似,都可以看做是一套操作web頁面的規(guī)范。當(dāng)然,他們的工作原理不一樣。
            selenium RC 在瀏覽器中運(yùn)行 JavaScript 應(yīng)用,使用瀏覽器內(nèi)置的 JavaScript 翻譯器來翻譯和執(zhí)行selenese 命令(selenese 是 selenium 命令集合) 。
            WebDriver 通過原生瀏覽器支持或者瀏覽器擴(kuò)展直接控制瀏覽器。WebDriver 針對(duì)各個(gè)瀏覽器而開發(fā),取代了嵌入到被測(cè) Web 應(yīng)用中的 JavaScript。與瀏覽器的緊密集成支持創(chuàng)建更高級(jí)的測(cè)試,避免了JavaScript 安全模型導(dǎo)致的限制。除了來自瀏覽器廠商的支持,WebDriver 還利用操作系統(tǒng)級(jí)的調(diào)用模擬用戶輸入。
            看樣子webdriver 更牛B一些。為了保持向兼容,所以selenium 2.0中,RC 和webdriver 并存,但說起selenium 2.0 一般指的是webdriver 。
            并行與分布式的區(qū)別
            有同學(xué)好奇如何并行的執(zhí)行測(cè)試用例,并行要求“同時(shí)”執(zhí)行多條用例,這個(gè)也是由編程語言的多線程技術(shù)實(shí)現(xiàn)的。
            你會(huì)問Selenium Grid 不是可以實(shí)現(xiàn)分布式執(zhí)行么? 分布式的概念是寫好一條用例可以調(diào)用不同的平臺(tái)執(zhí)行,如 A電腦上有一個(gè)測(cè)試用例,可以調(diào)用B電腦(linux)的 Firefox瀏覽器來跑A電腦上的測(cè)試用例;也可以調(diào)用C電腦(windows)的 Chrome瀏覽器來跑A電腦上的測(cè)試用例。這是分布式的概念。
            Selenium如何能做移動(dòng)端測(cè)試么?
            這里我們以python 語言為例。
            from selenium import webdriver
            driver= webdriver.Chrome()   #獲取瀏覽器驅(qū)動(dòng)。拿到瀏覽器驅(qū)動(dòng)driver 才能操作瀏覽器所打找的頁面上的元素。
            我們把驅(qū)動(dòng)展開是這樣的
          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
          })
            驅(qū)動(dòng)里包含了一些參數(shù),代理服務(wù)器(URL)平臺(tái),瀏覽器 ,瀏覽器版本等。
            移動(dòng)端的自動(dòng)化測(cè)試工具Appium
            從本質(zhì)上來講,appium同樣繼承了WebDriver  API的接口規(guī)范。Appium 同樣是支持多種編程語言的。這里仍然以python 為例子。
            from appium import webdriver  #導(dǎo)入python版的 appium(webdriver)模塊
          #定義驅(qū)動(dòng)的參數(shù)
          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)
            這一次因?yàn)槲覀儾僮鞯氖且苿?dòng)端的安卓。所以我們驅(qū)動(dòng)的參數(shù)里就要指定平臺(tái)是'Android' ,版本是4.2 等信息。拿到驅(qū)動(dòng)后,就可以操作安卓上的APP了。

          posted on 2014-09-23 09:38 順其自然EVO 閱讀(386) 評(píng)論(0)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動(dòng)化測(cè)試學(xué)習(xí)

          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 韶关市| 安泽县| 安平县| 安新县| 汉川市| 大余县| 五家渠市| 二连浩特市| 曲阳县| 汝城县| 喀喇沁旗| 内江市| 玉山县| 五华县| 麦盖提县| 浦北县| 衡东县| 营山县| 沙坪坝区| 石屏县| 剑阁县| 中宁县| 交口县| 延边| 家居| 临漳县| 临朐县| 阿拉善左旗| 伊金霍洛旗| 河西区| 兴义市| 普格县| 通州市| 基隆市| 广丰县| 那曲县| 镇远县| 丰宁| 洛宁县| 聂荣县| 时尚|