天天看點

自動化基礎普及之selenium是什麼?

  selenium 是啥?

  selenium rc是啥?

  webdriver 又是啥?

  rc 和 webdriver 是啥關系?

  webdriver 和程式設計語言啥關系?

  selenium 能并行執行腳本嘛?

  這裡蟲師用簡單方式,告訴你,他們錯綜複雜的關系。理順了它們之間的關系才能真正使用它。

  selenium 是什麼?

  selenium ide 是firefox浏覽器的一個插件。提供簡單的腳本錄制、編輯與回放功能。

  rc和webdriver 更多應該把它看成一套規範,在這套規範裡定義用戶端腳步與浏覽器互動的協定。以及元素定位與操作的接口。

  webdriver是什麼?

  對于剛接觸selenium自動化測試的同學來說不太容易了解api是什麼,它到底和程式設計語言之是什麼關系。

  http://www.w3.org/tr/2013/wd-webdriver-20130117/

  當初,在剛學selenium (webdriver)的時候花了一個星期來翻譯這個文檔,後來也沒弄明白,它是啥。其實它就是一層基礎的協定規範。

  假如說:webdriver api(接口規範)說,我們要提供一個頁面元素id的定位方法。

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定位方法

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了。

最新内容請見作者的github頁:http://qaseven.github.io/

繼續閱讀