使用Python+selenium實現第一個自動化測試腳本
一,安裝Python.
python官方下載地址:https://www.python.org/downloads/
安裝后點擊開始菜單,在菜單最上面能找到IDLE.
IDLE是python自帶的shell, 點擊打開, 即可開始編寫python腳本了.

二,安裝selenium
上面python已安裝完成,接下來安裝selenium.
安裝selenium之前需要安裝必要工具. setuptools
安裝后,(比如zip包形式安裝),進入解壓的目錄,在命令行執行如下命令即可安裝.
python setup.py install
再然后安裝pip
https://pypi.python.org/pypi/pip
同樣,安裝tar或解壓包,進入目錄cmd執行python setup.py install即可安裝
安裝selenium
上面2個工具安裝好后,安裝selenium只需在命令行進入python安裝路徑Script目錄下,執行
pip install -U selenium


即可自動安裝.
完成安裝后在IDLE輸入
from selenium
import webdriver

如果沒報錯即代表安裝成功.
三,注意事項
selenium3.0 需要獨立安裝FireFox驅動.解壓后放在python安裝路徑下即可.
geckodriver驅動要求FireFox瀏覽器必須48版本以上,如果不是,更新FireFox.
如果用Java開發,需注意3.0必須用JDK1.8版本才行.
同樣谷歌的驅動,沒FQ只能使用阿里的鏡像了.
注意阿里的鏡像對應的谷歌的版本:

四,第一個自動化腳本
完成上面所有准備工作,就可以開始第一個自動化腳本的編寫了.
打開IDLE,通過快捷鍵CTRL+N打開一個新窗口,在新窗口輸入以下代碼:
# coding = utf-8
from selenium
import webdriver
browser = webdriver.Firefox()
browser.get(
"http://www.baidu.com")
browser.find_element_by_id(
"kw").send_keys(
"selenium")
browser.find_element_by_id(
"su").click()
browser.quit()
這里如果關的過快,就需要將browser.quit()給去掉.不然看不見操作
寫完腳本后腳本頁執行F5快捷鍵運行腳本,可以看到腳本啟動FireFox瀏覽器進入百度頁面,輸入”selenium”點擊搜索按鈕,第一個腳本即完成了.
代碼解析:
# coding = utf-8
(為了防止亂碼問題,以及在程序中添加中文注釋,把編碼統一成UTF
-8;)
from selenium
import webdriver
(導入selenium的webdriver包,導入webdriver包后才能使用webdriver API進行自動化腳本開發.)
browser = webdriver.Firefox()
(將控制的webdriver的Firefox賦值給browser,獲得了瀏覽器對象才可以啟動瀏覽器;)
browser.get(
"http://www.baidu.com")
(獲得瀏覽器對象后,通過get()方法,向瀏覽器發送網址;)
browser.find_element_by_id(
"kw").send_keys(
"selenium")
(通過id=kw定位到百度的輸入框,並通過鍵盤方法send_keys()向輸入框輸入selenium;)
browser.find_element_by_id(
"su").click()
(通過id=su定位到搜索按鈕,並向按鈕發送單擊事件(click());)
browser.quit()
(退出並關閉窗口的每一個相關的驅動程序.)
名詞解釋:
1.
find_element_by_id()
我們可以直接通過英文意思理解這個方法,通過ID查找元素,也就是使用頁面里的id屬性:id=”“. 我們先定位百度搜索框,在搜索框里輸入我們要查找的內容.

2.
find_element_by_name()
這個定位的方法是通過查找名字的方式,對元素進行定位,我們在檢查元素的時候看到name=”“,就可以使用這個方法了.
3.
find_elements_by_class_name()
這個定位的方法是通過查找class_name的方式對元素進行定位,在檢查元素的時候看到class=”“,就可以使用這個方法了.
4.
find_element_by_tag_name()
這個定位的方法是通過元素的標簽屬性對元素進行定位,在檢查元素的時候查看元素的最前面的input,但是這個定位方式有個不好的地方在於很多頁面都有同樣的標簽存在,所以我們定位的時候會很麻煩.
所以,這個方法我們不推薦使用. 這個方法也是僅供參考.
實際上是會報錯的,因為selenium在定位的時候不清楚我們要找的是哪個元素.
我們如果一定要用這個方法的花,我們就需要清楚,我們定位的標簽的精准位置.
5.
find_element_by_link_text()
這個定位方式是通過查找頁面的文本信息進行定位. 也就是我們看到頁面的信息去定位, 例如:我們需要定位百度首頁的登錄按鈕.並點擊它.

6.
find_element_by_partial_link_text()
這個方法的定位方式就是通過模糊文本信息查找元素,有些時候,我們希望定位到一個文本比較長的元素時,我們就可以通過這個方法去定位.
例如: 定位百度首頁頁腳下的”使用百度前必讀”, 我們是輸入”使用”.
from selenium
import webdriver
driver = webdriver.Chrome()
driver.get(
"http://www.baidu.com")
driver.find_element_by_partial_link_text(
"使用").click()
這樣我們也是可以定位到該元素的.
7.
find_element_by_xpath()
最后來說兩種最常用的定位方法,xpath元素定位:通過查找元素的路徑去查找元素.
這兩個方法在使用上目前很廣泛,也很多人推薦使用.這兩個很方便,因為瀏覽器已經幫我們做好准備了,我們只需要復制粘貼就可以了.
我們繼續定位搜索框.
這樣我們直接復制xpath路徑就可以了,這樣就可以解決我們會輸入錯誤元素的問題(注:在使用xpath的時候,最外面的雙引號改成單引號.
8.
find_element_by_css_selector()
css在操作上跟xpath差不多,也是通過復制粘貼的方式進行定位,不同在於css方法通過對頁面中的css元素定位的.

之上8條的原blog,內涵有其它的腳本界面工具Autolt的介紹
假設測試test1.給定登錄頁面的username和password,並點擊登錄按鈕,進行自動登錄測試
代碼如下:
就可以以這條腳本運行,而.py文件保存到桌面也可以直接雙擊運行(首先要安裝python)

加入再測試其它功能可以根據獲取id,name等繼而進行測試操作.上面只是基本測試.
之后需要進行測試案例的編寫,返回測試數據. 以及與ones.ai自動化測試連接.
ones的對接文檔
通用說明
流水線(pipeline)
| 參數名 | 值類型 | 取值范圍 | 默認值 | 取值例子 | 說明 |
| uuid | string | len=8 | pipeline uuid | ||
| name | string | len<=32 | pipeline 名稱 | ||
| owner | string | len=8 | pipeline 創建者 uuid | ||
| create_time | int64 | pipeline 創建時間(秒) | |||
| project | object | pipeline 綁定的 project 信息 | |||
| uuid | string | len=8 | 項目 uuid | ||
| name | string | 項目名稱 | |||
| configure_statuses | object | pipeline 配置狀態 | |||
| scm | object | 代碼倉庫集成配置狀態,參考下方說明 | |||
| ci | object | 持續集成配置狀態,參考下方說明 | |||
| lint | object | 代碼質量檢查配置狀態,參考下方說明 | |||
| test | object | 自動化測試配置狀態,參考下方說明 | |||
| artifact | object | 部署結果關聯配置狀態,參考下方說明 | |||
| branches | array | pipeline 下的已知分支列表,參考下方說明 | |||
| branch_sprint_bindings | array | pipeline 下分支與迭代的綁定列表,參考下方說明 | |||
| sprint_binding_rule | string | pipeline 與項目下迭代的自動綁定規則, 參考下方說明 |
API 說明
1. pipeline 回調
創建一個 pipeline
URL
https://api.ones.ai/project/team/:teamUUID/pipeline/:pipelineUUID/callback
HTTP Method
POST
調用權限
無
傳值方式
JSON
參數說明
{
"action":
"stage",
"stage": {
"type":
"test",
//stage 類型:start,finish,lint,test
"name":
"test",
//stage 名稱, eg: "test"
"start_time": start_time,
//階段的開始時間,單位秒
"finish_time": finish_time,
//階段的結束時間,單位秒
"status": status,
//stage 狀態:unknown,success,failure
},
"payload": {
"test": {
"executions": [{
"language":
"python",
// 測試語言
"framework":
"selenium",
// 測試框架名
"id":
"",
// 執行結果的 ID
"start_time":
""
// 開始執行的時間,單位毫秒
"finish_time":
""
// 執行完成的時間,單位毫秒
"name":
"用例名",
"description":
"用例描述",
"result":
"執行結果",
//success, failure, error, skip, unexpected_success, expected_failure
"message":
"錯誤消息"
}]
}
}
}
返回的HTTP status code
| 狀態碼 | 說明 |
| 200 | 成功 |
| 400 | 請求結構錯誤 |
| 403 | token 無效,無權限 |
| 500 | 服務器錯誤 |
| 801 | 參數錯誤 |
返回JSON
| 參數名 | 值類型 | 取值范圍 | 默認值 | 取值例子 | 說明 |
| pipeline | object | 參考頂端 pipeline 模型 |
