==========================================================================================================
寫在前面:
終於有點親切的感覺了,這個是web的airtest自動化測試程序,代碼基本上使用的其實是selelium框架的python版本,雖然對python語言了解
的不是特別深入,學的不是特別多,但目前級別能看懂。希望后期能在python和airtest以及selenium等多框架上摩擦出更多火花。
==========================================================================================================
參考鏈接:1.5 web測試
本文約2200字,閱讀全文可能將花費7分鍾。
1. Airtest-Selenium測試框架原理圖
Selenium
是一款web自動化測試框架,它支持各種瀏覽器,包括 Chrome,Safari,Firefox 等主流瀏覽器。
得益於Selenium對Python的良好支持,我們在Airtest Project中添加了Airtest-Selenium插件,我們可以使用AirtestIDE進行web自動化腳本錄制、腳本運行和報告生成。本文將介紹如何使用AirtestIDE進行web自動化測試。
2. 錄制視頻示例
demo
3. 自動化錄制詳細步驟 (針對Chrome)
- 本地安裝最新版AirtestIDE以及Chrome瀏覽器;
- 開啟Selenium輔助窗:“窗口”-“Selenium Window”
1_window
- 設置Chrome本地路徑:“選項”-“設置”-“Selenium”-“設置Chrome路徑”;
2_setting
-
開啟瀏覽器並生成初始化代碼:點擊
11_start_web 開啟瀏覽器-點擊編輯框中彈出的提示,生成初始化代碼;
from selenium import webdriver from selenium.webdriver.common.keys import Keys from airtest_selenium.proxy import WebChrome driver = WebChrome() driver.implicitly_wait(20)
注意:對於Firefox,這段代碼可以正確插入,但是不會打開任何瀏覽器
-
生成訪問待測試網址的代碼:瀏覽器中進入待測試的網頁-點擊輔助窗的start_web;
driver.get("http://news.baidu.com")
-
開始Airtest-Selenium腳本錄制:點擊錄制
4_record - 在瀏覽器進行操作
-
結束錄制,運行腳本:點擊運行腳本按鈕
12_run_button
-
運行結束后,點擊報告按鈕,查看報告
13_report
4. 輔助功能窗
當用戶想單獨生成某一條代碼語句時,可以通過輔助窗的按鈕來幫助生成想要的操作。下面把輔助窗的按鈕分為三類,並分別對其功能進行詳細說明。
① Inspect類按鈕
這一類按鈕點擊后,不會直接生成代碼;瀏覽器會進入inspect模式,用戶可以在瀏覽器中選擇自己想要操作的元素進行點擊,然后編輯框內會生成代碼定位到對應元素,並生成對應操作的代碼。
5_inspect_button
如果您使用Firefox而不是Chrome,您將看到腳本編輯器中插入的命令,但是您不能在瀏覽器中直接執行任何操作。
- Inspect按鈕: 點擊這個按鈕后,選取頁面元素,會生成一個定位到該元素的語句。但不會在后面生成對應的操作代碼,用戶可以自行補充想要執行的selenium語句。例:
driver.find_element_by_xpath("//*[@id=\"navbarContent\"]/ul/li[2]/a")
還支持其他查找元素的方法* - touch按鈕:這個按鈕,點擊后會生成點擊對應元素的代碼。例:
driver.find_element_by_xpath("//*[@id=\"navbarContent\"]/ul/li[2]/a").click()
- text按鈕:點擊這個按鈕,會生成一條在指定元素內輸入文本的語句,生成代碼后,用戶需自行在內部填入需要輸入的文本。同時,用戶可以定義在輸入后執行某個鍵盤事件,如回車。例:
driver.find_element_by_xpath("//input[@placeholder='Search']").send_keys("Airtest Project", Keys.ENTER)
- assert按鈕:assert按鈕在點擊后,生成一條assert頁面元素是否存在的語句。這是一條Airtest-Selenium封裝的語句,在運行時會嘗試用參數代表的方法去尋找元素,如果找到會返回True,如果沒找到會返回False。可用於測試腳本是否成功的判讀。例:
driver.assert_exist("//*[@id=\"js-pjax-container\"]/div/header/div/nav/a[2]", "xpath")
② Airtest圖像識別類按鈕
這一類按鈕,點擊后進入截取圖像模式,對當前屏幕進行框選區域並截圖。
11_airtest_button
-
airtest_touch: 點擊該按鈕開啟截屏模式,對當前屏幕進行截屏,可從瀏覽器中截取區域圖片。表示對截取圖片進行點擊。例:
12_airtest_touch
-
assert_template: 點擊該按鈕后,對當前屏幕截圖。表示斷言當前瀏覽器存在該圖片。例
13_assert_template
③ 直接生成代碼按鈕
這一類按鈕,點擊后直接生成代碼。不需多余操作,不過部分按鈕會根據當前瀏覽器實際情況生成不同的參數。 對於Firefox,不會在頁面上顯示檢視器,而是直接生成代碼
10_operate
- start_web: 點擊該按鈕后生成當前瀏覽器所訪問的頁面地址的語句。例:
driver.get("https://github.com/AirtestProject")
- snapshot: 點擊該按鈕后生成對當前頁面進行截圖的語句。例:
driver.snapshot()
- new_tab: 點擊該按鈕生成一條跳轉在最新出現的標簽頁的語句,一般用在一個生成新的標簽頁的語句后面。例:
driver.switch_to_latest_window()
- previous_tab: 點擊該按鈕生成一條跳轉到當前標簽頁之前的標簽頁(父標簽)的語句。例:
driver.switch_to_last_window()
- back: 點擊該按鈕,生成后退到上一個頁面的語句。例:
driver.back()
- forward: 點擊該按鈕,生成前進到下一個頁面的語句。例:
driver.forward()
5. 多標簽錄制邏輯
Airtest-Seleniums是一個支持多標簽頁操作的測試框架,不過為了保證運行和錄制時的一致性,也為了讓用戶理解清楚標簽的切換規則,這里要說明一下不同標簽頁之間切換操作的規則。
Airtest-Selenium中用driver.switch_to_previous_tab()
和driver.switch_to_new_tab()
兩個接口來處理不同標簽頁之間的邏輯。driver.switch_to_new_tab()
接在當新的標簽頁生成的時候,會跳轉到最新的標簽頁。例如:
driver.find_element_by_xpath("//a[@href='http://news.cctv.com/world/']").click() driver.switch_to_new_tab()
執行這兩句話之前,本來瀏覽器在A標簽頁,這時運行了第一句話,生成了B標簽頁,同時瀏覽器也跳轉到了B標簽頁中。這時如果需要繼續寫基於B標簽頁的邏輯,需要執行driver.switch_to_new_tab()
這個語句,這個語句告訴ChromeDriver要去爬B標簽頁而不再是A的dom樹結構了。
而driver.switch_to_previous_tab()
這個語句則是用在driver.switch_to_new_tab()
之后,與其配對存在。上文相同的例子,我在B標簽頁做完了操作以后,可以通過driver.switch_to_previous_tab()
這個接口告訴ChromeDriver,不再管B了,重新去獲取A的dom樹結構。然后就可以繼續基於A標簽頁寫接下來的邏輯腳本了。
在錄制模式下,當用戶通過一個操作生成新的標簽頁時,Airtest-Selenium會識別出標簽頁的變化,並切換到最新的標簽頁,同時在編輯框內生成切換標簽頁的代碼。在新的標簽頁執行完操作后,點擊關閉標簽頁,Airtest-Selenium則會跳回到上一個生成該標簽的標簽頁,同時在編輯框內生成關閉和調回標簽頁的代碼。
這里用一個小視頻來看看多標簽頁錄制的效果: