前言
我們每一個(gè)的selenium測(cè)試都應(yīng)該在指定的環(huán)境下運(yùn)行典徊,這個(gè)環(huán)境可以是web瀏覽器颤专、移動(dòng)設(shè)備、移動(dòng)模擬器等等。
那怎么來(lái)指定我們的selenium測(cè)試腳本運(yùn)行環(huán)境呢代箭?
本次分享主要解決這個(gè)問(wèn)題6栈!嗡综!
在python版本的webdrive中乙帮,DesiredCapabilities類為我們提供了解決方案,通過(guò)這個(gè)類极景,我們能夠配置webdriver在指定的環(huán)境執(zhí)行我們的測(cè)試腳本察净。
我們先看一張實(shí)際測(cè)試過(guò)程中會(huì)應(yīng)用到的結(jié)構(gòu)圖,基于selenium grid進(jìn)行分布式測(cè)試:
在上圖中盼樟,我們可以使用windows下ie氢卡、firefox或linux下ie、firefox進(jìn)行測(cè)試晨缴,甚至可以設(shè)置使用andriod或ios設(shè)備下瀏覽器進(jìn)行測(cè)試译秦。
那怎么來(lái)進(jìn)行設(shè)置呢?
我們先看一下DesiredCapabilities的源碼
源碼分析
DesiredCapabilities類代碼在C:\Python27\Lib\site-packages\selenium\webdriver\common\desired_capabilities.py击碗。
注:筆者的python安裝在C盤下筑悴。
class DesiredCapabilities(object):
"""
Set of default supported desired capabilities.
Use this as a starting point for creating a desired capabilities object for
requesting remote webdrivers for connecting to selenium server or selenium grid.
Usage Example::
from selenium import webdriver
selenium_grid_url = "http://198.0.0.1:4444/wd/hub"
# Create a desired capabilities object as a starting point.
capabilities = DesiredCapabilities.FIREFOX.copy()
capabilities['platform'] = "WINDOWS"
capabilities['version'] = "10"
# Instantiate an instance of Remote WebDriver with the desired capabilities.
driver = webdriver.Remote(desired_capabilities=capabilities,
command_executor=selenium_grid_url)
Note: Always use '.copy()' on the DesiredCapabilities object to avoid the side
effects of altering the Global class instance.
"""
FIREFOX = {
"browserName": "firefox",
"version": "",
"platform": "ANY",
"javascriptEnabled": True,
"marionette": True,
}
INTERNETEXPLORER = {
"browserName": "internet explorer",
"version": "",
"platform": "WINDOWS",
"javascriptEnabled": True,
}
EDGE = {
"browserName": "MicrosoftEdge",
"version": "",
"platform": "WINDOWS"
}
CHROME = {
"browserName": "chrome",
"version": "",
"platform": "ANY",
"javascriptEnabled": True,
}
OPERA = {
"browserName": "opera",
"version": "",
"platform": "ANY",
"javascriptEnabled": True,
}
SAFARI = {
"browserName": "safari",
"version": "",
"platform": "MAC",
"javascriptEnabled": True,
}
HTMLUNIT = {
"browserName": "htmlunit",
"version": "",
"platform": "ANY",
}
HTMLUNITWITHJS = {
"browserName": "htmlunit",
"version": "firefox",
"platform": "ANY",
"javascriptEnabled": True,
}
IPHONE = {
"browserName": "iPhone",
"version": "",
"platform": "MAC",
"javascriptEnabled": True,
}
IPAD = {
"browserName": "iPad",
"version": "",
"platform": "MAC",
"javascriptEnabled": True,
}
ANDROID = {
"browserName": "android",
"version": "",
"platform": "ANDROID",
"javascriptEnabled": True,
}
PHANTOMJS = {
"browserName": "phantomjs",
"version": "",
"platform": "ANY",
"javascriptEnabled": True,
}
翻譯下:
Set of default supported desired capabilities.
desired capabilities默認(rèn)支持的設(shè)置。
Use this as a starting point for creating a desired capabilities object for
requesting remote webdrivers for connecting to selenium server or selenium grid.
使用該類為selenium server或selenium grid啟動(dòng)一個(gè)desired capabilities配置
對(duì)配置項(xiàng)進(jìn)行解釋
FIREFOX = {
"browserName": "firefox", # 瀏覽器名稱
"version": "", # 操作系統(tǒng)版本
"platform": "ANY", # 平臺(tái)延都,這里可以是windows雷猪、linux、andriod等等
"javascriptEnabled": True, # 是否啟用js
"marionette": True, # 這個(gè)值沒(méi)找對(duì)應(yīng)的說(shuō)明^_^ 不解釋了
}
DesiredCapabilities示例
from selenium import webdriver
# 本地啟動(dòng)selenium grid
selenium_grid_url = "http://127.0.0.1:4444/wd/hub"
# 創(chuàng)建一個(gè)DesiredCapabilities實(shí)例
capabilities = DesiredCapabilities.FIREFOX.copy()
capabilities['platform'] = "WINDOWS" # 指定操作系統(tǒng)
capabilities['version'] = "10" # 指定操作系統(tǒng)版本
# 連接到遠(yuǎn)程服務(wù)進(jìn)行自動(dòng)化測(cè)試
driver = webdriver.Remote(desired_capabilities=capabilities,
command_executor=selenium_grid_url)
總結(jié)
這里的本質(zhì)就是基于selenium grid 構(gòu)建分布式自動(dòng)化測(cè)試晰房,而selenium grid根據(jù)測(cè)試腳本構(gòu)建的DesiredCapabilities參數(shù)來(lái)決定將您的測(cè)試腳本分發(fā)到哪臺(tái)機(jī)器或設(shè)備進(jìn)行測(cè)試求摇。