airtest web 录制滑块_Airtest之web自动化(一)
Airtest之web自動化(一)
[此文檔有許多涉及到gif動圖的地方,請全屏觀看]
了解Airtest:
簡介:
Airtest是由網易團隊開發的一款自動化框架,前期運用與游戲測試(通過截圖識別),后來又被運用到安卓測試以及web測試。這款自動化框架如此強大的原因來自其團隊自己開發的一個圖像識別框架,這個框架的祖宗就是一種新穎的圖形腳本語言Sikuli。Sikuli這個框架的原理是這樣的,計算機用戶不需要一行行的去寫代碼,而是用屏幕截屏的方式,用截出來的圖形擺列組合成神器的程序,這是Airtest的一部分。另外,Airtest也基于poco這個UI控件搜索框架,這個框架也是網易自家的跨平臺UI測試框架,原理類似于appium,通過控件的名稱,id之類的來定位目標控件,然后調用函數方法,例如click(),send_keys()之類的方法來對目標控件進行點擊或者是操作。
Airtest展示:
這個動圖是Airtest官方文檔中截取的,細心的同學可能已經發現:Airtest實現的腳本是python+selenium,剛剛接觸到這款框架的時候,我在想這不就是python+selenium的再封裝嗎,也沒有什么新穎的地方。但是細心認真的看,才會發現Airtest強大的之處...
一:Airtest打開瀏覽器,導入必須的類
在配置好chrome瀏覽器,以及webdriver之后(此操作很簡單),點擊AirtestIDE中selenium窗左上方的像地球一樣的圖標,打開瀏覽器,然后腳本編輯窗會提示你是否導入必要的模塊,點擊yes(已經導入了的就點擊No)
點擊yes后結果:可以看到此處除了導入必要的類以外,還實例化了driver:(driver = WebChrome()),并設置了隱性等待時間:(driver.implicitly_wait(20)),這些都是可以編輯的
start_web按鈕:實現driver.get()操作
start_web按鈕點擊就會生成代碼,這樣類型的按鈕還有許多,他們被稱為直接生成代碼按鈕:(這一類按鈕,點擊后直接生成代碼。不需多余操作,不過部分按鈕會根據當前瀏覽器實際情況生成不同的參數。 對于Firefox,不會在頁面上顯示檢視器,而是直接生成代碼)
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()
airtest—錄制:
如動圖所示:點擊AirtestIDE中selenium窗中右上角攝像頭的圖標之后便可以開始錄制,在瀏覽器中的每一步操作都會變為python代碼保存在腳本編輯窗中。當然錄制也會有些弊端,所以需要酌情使用。弊端:元素定位時不能通過id,name這種簡單方式定位,且xpath過長時可能會出現bug(此處可以自己嘗試一下),解決方案,所有的元素定位都可以自己寫,也可以通過airtest_touch(圖像識別點擊)跳過元素定位——后面細講
類似于錄制的按鈕也還存在許多,這類按鈕被稱作: Inspect類按鈕(這一類按鈕點擊后,不會直接生成代碼;瀏覽器會進入inspect模式,用戶可以在瀏覽器中選擇自己想要操作的元素進行點擊,然后編輯框內會生成代碼定位到對應元素,并生成對應操作的代碼)
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——Airtest_touch
可以避免復雜的元素定位,以及框架的頻繁切換的情況
airtest—assert_template(基于圖片識別的斷言)
上面的兩個按鈕是Airtest自帶的圖像識別按鈕(這一類按鈕,點擊后進入截取圖像模式,對當前屏幕進行框選區域并截圖。)
airtest_touch: 點擊該按鈕開啟截屏模式,對當前屏幕進行截屏,可從瀏覽器中截取區域圖片。表示對截取圖片進行點擊。例:
1_airtest_touch
assert_template: 點擊該按鈕后,對當前屏幕截圖。表示斷言當前瀏覽器存在該圖片。例
1_assert_template
airtest——測試報告:
Airtest腳本運行完成之后會自動生成測試報告,點擊IDE上方的LOG頁簽按鈕及可查看,測試報告會將整個腳本的每一個步驟記錄下來,最新版本的測試報告與動圖展示的樣式還有些不一樣,但是內容是差不多的:
Airtest其他操作:
Airtest生成的代碼是純python代碼,所以還有很多其他操作可以直接用python+selenium實現
上傳文件:
1、定位頁面上用于上傳文件的input元素,其屬性應該是type為file(通常為上傳文件的那個框或按鈕)
2、用driver.find_element_by...定位該元素
3、對該元素進行send_Keys()操作,內容為你要上傳的文件
加載用戶配置文件:有時候需要繞過驗證碼,或者用到瀏覽器中其他配置時使用
1、在瀏覽器啟動代碼之前創建ChromeOptions()屬性option
2、在option中通過add_argument()方法添加屬性‘--user--data--dir’
3、在調用webChrome方法啟動瀏覽器之前,加上chrome_options = option參數加載用戶配置文件
4、訪問網站,就可以加載本地瀏覽器已經記錄的cookie
代碼如下:
option = ChromeOptions()
?
option.add_argument(‘--user--data--dir = "你的瀏覽器存儲配置文件的路徑"’)
?
driver = WebChrome(chrome_options = option)
附:
附一個之前為了這片介紹而寫的一個小腳本:
本來想用這個腳本的實現過程來自己來錄制gif講解的,但是太錄制出來的效果不怎么好,也太耗時了,于是就放棄了。
總結一波Airtest的亮點:
1、能夠快速定位元素,一鍵實現許多我們常用的動作(點擊,輸入,前進,后退,截圖...)
2、將selenium關于元素的斷言實現了封裝
3、可以錄制腳本,降低了自動化的難度
4、一鍵切換窗口,少去了通過句柄切換窗口的煩惱
5、基于圖片識別的點擊和斷言,避免了元素難定位,iframe切換頻繁的問題
整個腳本實現過程就在2分鐘左右,用Airtest來輔助寫自動化腳本的效率真的很高,但是現在的唯一的問題是找不到整套可以預期配合的自動化框架,也難以實現PO設計理念,測試報告對于整個項目來說也是相當冗余的。
但是Airtest錄制的腳本是可以在其他python環境中運行,需要我們安裝其依賴的兩個庫:’atrtest‘以及’poco‘,這樣的話,上面所講的缺點還是有辦法解決的(下一貼再講)。
總結
以上是生活随笔為你收集整理的airtest web 录制滑块_Airtest之web自动化(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今年实际假期余额仅剩4天!国庆节后连上7
- 下一篇: 老师带学生用饮料瓶做三级推进火箭:动力分