自動化基礎普及之selenium是啥?


Selenium 並不像QTP那樣讓人一下子就明白是什么?它是編程人員的最愛,但它卻對測試新手產生了很大的阻礙。

 

Selenium 是啥?

Selenium RC是啥?

Webdriver 又是啥?

RC 和 Webdriver 是啥關系?

Webdriver 和編程語言啥關系?

Selenium 能並行執行腳本嘛?

Selenium 能做移動端自動化么?

 

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

 

 

Selenium 是什么?

 

Selenium web自動化測試工具集,包括IDEGridRCselenium 1.0)、WebDriverselenium 2.0)等。

Selenium IDE firefox瀏覽器的一個插件。提供簡單的腳本錄制、編輯與回放功能。

Selenium Grid 是用來對測試腳步做分布式處理。現在已經集成到selenium server 中了。

RCWebDriver 更多應該把它看成一套規范,在這套規范里定義客戶端腳步與瀏覽器交互的協議。以及元素定位與操作的接口。

 

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

 

Javawebdriver模塊是這么實現的:

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 版本的seleniumwebdriver

 

 

2、使用id方法

Click element

Id=xx

 

 

需要說明的是 webdriver API 只提供了web頁面操作的相關規范,比如元素定位方法,瀏覽器操作,獲取web頁元素屬性等。

 

 

 

Webdriver  如何組織和執行用例?

 

    對不起,webdriver 不會。

 

把寫好這些操作頁面元素的方法(用例)組織起來執行並輸入測試結果,是由編程語言的單元測試框架去完成的。如java junittestng單元測試框架,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了。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM