一、環境搭建
airtest內置python 和selenium庫,並且進行封裝,所以用來做web 自動化也是非常方便的
操作原理:
airtest web 自動化測試是基於python 語言和selenium 庫,通過調用chrome瀏覽器Devtools Protoco協議,將用戶
操作解析成python 腳本
1、准備安裝chrome瀏覽器最(新版本為89版本)
特別注意:airtest 自帶chromedriver 是不支持最新的版本chrome 瀏覽器,需要重新下載chrome 瀏覽器對應chromedriver 去覆蓋airtest里面的版本,否則chrome
會啟動不起來
下載地址:http://chromedriver.storage.googleapis.com/index.html
2、啟動airtest設置chrome 瀏覽器的啟動文件路徑
選項->設置->selenium->chromepath 設置chrome 啟動路徑->ok
3、在airtest 的窗口中勾選上selenium window
4、新建.air Airtest項目
1) 新建.air 項目
2)點擊啟動瀏覽器,導入相應的包和初始化代碼
包的導入和初始化代碼
5、windows 窗口操作
1)windows窗口連接
1、選擇游戲窗口
打開正在運行chrome的窗口,然后對需要的進行框選,則該窗口會展示在窗口界面
框選瀏覽器
選中后,該chrome 會在設備窗口展示
2、搜索窗口
搜索選擇對應的窗口和選擇游戲窗口差不多
3、其他
由於Windows應用的底層實現各不相同,有些應用窗口如果使用默認的一鍵嵌入方法,在嵌入到AirtestIDE里之后會遇到一些問題(例如嵌入后無法用鼠標操作、無法正常嵌入、 嵌入后無法顯示圖像等)。
針對這些問題,我們提供了一種無嵌入連接的方案,請在AirtestIDE的設置面板中,找到Device
-Windows Embed Backup Method
,勾選后即可使用備用方案來連接窗口。
接下來的連接方式和常規方法一樣,點擊選定窗口,然后選擇待測窗口程序:
二、selenium 常用的操作
1、窗口操作
Web 錄制無法模擬的按鍵操作,可以手動通過代碼來完成,比如send keys, keys.ENTER 等等。
2、元素操作
· clear() 清楚元素輸入的內容
·send_keys() 模擬鍵盤按鍵輸入內容
·click() 模擬鼠標對元素的點擊
·submit()提交表單 sendkeys(Keys.RETURN)相當於回車登錄, 如果需要輸入中文,防止編碼錯誤使用sendkeys(u"中文用戶名")
3、WebElement接口可以獲取常用的值:
·size() 獲取元素的尺寸
·text()獲取元素的文本
·get_attribute(id) 獲取元素的屬性值
·location()獲取元素的坐標值,先找到要獲取的元素,再調用該方法
·page_source()返回頁面的源碼
·driver.title() 返回頁面的標題
·current_url()獲取當前頁面的url 地址
·is_displayed()設置該元素是否可見
·is_enabled() 判斷元素是否被選用
·is_selected()判斷元素是否被選中
·tag_name()返回tagname 的元素
4、常見鍵盤操作
- send_keys(Keys.ENTER) 按下回車鍵
- send_keys(Keys.TAB) 按下Tab制表鍵
- send_keys(Keys.SPACE) 按下空格鍵space
- send_keys(Kyes.ESCAPE) 按下回退鍵Esc
- sendkeys(Keys.BACKSPACE) 按下刪除鍵BackSpace
- send_keys(Keys.SHIFT) 按下shift鍵
- send_keys(Keys.CONTROL) 按下Ctrl鍵
- sendkeys(Keys.ARROWDOWN) 按下鼠標光標向下按鍵
- send_keys(Keys.CONTROL,'a') 組合鍵全選Ctrl+A
- send_keys(Keys.CONTROL,'c') 組合鍵復制Ctrl+C
- send_keys(Keys.CONTROL,'x') 組合鍵剪切Ctrl+X
- send_keys(Keys.CONTROL,'v') 組合鍵粘貼Ctrl+V
5、元素定位
·find_element_by_id:確定元素的id名稱,直接通過id查找可定位到元素,將返回頁面查找到的第一個id元素
·find_element_by_name:與id同樣,當確定元素的name名稱時,可直接通過name查找定位元素,同樣地,selenium將會返回頁面查找到的第一個name元素
·find element by xpath:xpath在xml文檔中可遍歷節點元素和屬性,是XML路徑語言。xpath同時擴展了通過id/name查找元素的方式,即是說,如果當前元素是id值,xpath會自動識別成("//*[@id="top-menu"]),同時諸多類型如input、button、錨點a、iamge等都可以進行判斷,比如 ("//button[@data-role='submit']") ,xpath的形式復雜多變,對於網站頁面千變萬化的內容而言,xpath能夠很好的自適應。
使用相對路徑的寫法以雙斜線開頭,絕對路徑以單斜線開頭從html最頂層開始遍歷,如下圖:
一般格式為//tagname[a href="https://testerhome.com/attribute">@attribute='value']/路徑/路徑,如//[@id="J_PmTaskInput"]/div/label , [*]表示包含所有
但不推薦使用絕對路徑,因為頁面可能經常元素變化,稍有改動可能就會導致定位失敗;相對路徑定位相對而言位置關系改動的概率更低,更靠譜,這樣腳本健壯性適應性更強。
·find_elment_by_css_selector:通過css選擇器定位元素,將返回頁面第一個匹配到的元素。
常用的選擇器:
#表示id,查找id名稱為J_Milestone的屬性,以及該屬性的下一級div
.表示class,查找該id下一級的div的class為os-milestone-check
*表示所有元素,>表示下一級
[]表示attribute,屬性名稱,[attribute=value] 指某屬性值的該屬性
:nth-child(n) 表示該父元素的第幾個子元素
css selector 相較於xpath的優點就是性能比xpath好,另外就是頁面排版布局位置有時候會變,但css selector相對更穩定,名稱一般不會經常變更。
·find_element_by_class_name:確定元素的class name,可通過class name直接查找定位元素,將會返回該頁面第一個匹配的class屬性的元素。
·find_element_by_link_text:這是一個查找超鏈接非常方便的一個定位方法,當確切知道頁面的某個超鏈接使用的標簽文本名稱,那可以直接通過findelementbylinktext 查找,將會返回頁面第一個匹配的錨點標簽。
·find element by partial link text:這也是一個查找超鏈接的方法,跟findelementbylinktext的區別在於,前者是精確查找,后者是模糊查找,也是相當好用的定位方法;同樣地,也是會返回頁面第一個匹配的錨點標簽。
6、返回多個元素
find elements 查找元素的方法跟find element 是類似的,不同的是find elements會返回一個list列表。
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partiallink_text
- find_elements_by_tagname
- find_elements_by_classname
- find_elements_by_cssselector
三、斷言
一個完整的測試腳本一定會包含對測試結果是否與預測結果一致的對比,從而判斷腳本是否執行成功,Airtest提供了以下斷言方法:
- assert_exists
- assert_not_exists
- assert_equal
- assert_not_equal