前言
Selenium是一個用於Web應用程序的自動化測試工具。它直接運行在瀏覽器中,可以模擬用戶在瀏覽器上面的行為操作。
在AirtestIDE中,開發者也給我們提供了使用Selenium的窗口。不過使用的框架是Airtest-Selenium框架。Airtest-Selenium是對selenium的python庫做的一層封裝,它添加了部分圖像識別的接口,也可以生成網頁版測試報告。
本文將借助IDE上的Selenium窗口,來給大家講解在瀏覽器上進行自動化測試的實戰。
IDE中的Selenium窗口
在AirtestIDE中調出Selenium的窗口
默認情況下,IDE沒有並顯示Selenium的窗口,所以我們需要在IDE頂部的窗口
菜單下,把Selenium Window
勾選上,勾選之后Selenium的窗口才會顯示在IDE界面的左側。
插入初始代碼的快捷按鈕
Selenium Window給我們提供了一些常用的按鈕,比如點擊窗口下類似地球的按鈕,會自動幫我們在腳本編輯窗口插入一些初始化代碼:
插入代碼之前,我們需要在腳本窗口彈出的黃色提供框中,選擇Yes允許插入代碼:
這樣,腳本編輯窗就會自動插入如下代碼:
# 引入selenium的webdriver模塊 from selenium import webdriver from selenium.webdriver.common.keys import Keys from airtest_selenium.proxy import WebChrome #創建一個實例,代碼運行到這里,會打開一個chrome瀏覽器 driver = WebChrome() driver.implicitly_wait(20)
需要注意的是,如果是首次使用這個按鈕,IDE會彈窗提示需要設置谷歌瀏覽器的路徑:
這時我們就需要先到選項--設置
中,找到Selenium那部分內容,然后把chrome的路徑設置好(chrome路徑可右鍵查看屬性),才能正常插入上述代碼。
Selenium的常用方法
打開指定網址
我們以打開微博首頁為例子:
driver.get("https://weibo.com/")
driver.get()
方法會在瀏覽器中打開一個指定的網址,給它傳入網址地址即可。
最大化窗口
driver.maximize_window()
關閉窗口/瀏覽器
# 關閉當前窗口,如果瀏覽器此時只有1個窗口,瀏覽器也會被關閉 driver.close() # 退出驅動關閉所有窗口 driver.quit()
Airtest-Selenium簡介
上文我們提到Airtest-Selenium是基於Selenium語法的,但是Airtest的開發者們還另外封裝了如下方法:
圖像識別接口
Airtest-Selenium對圖像識別的封裝有兩個接口,圖像識別點擊和圖像識別斷言:
①點擊Selenium Window下方的airtest_touch按鈕
在瀏覽器頁面上截取你想要點擊位置的圖片,雙擊完成截圖,腳本編輯窗口會自動生成1條圖像識別點擊的腳本
driver.airtest_touch(Template(r"tpl1582031994893.png", record_pos=(8.99, 5.23), resolution=(100, 100)))
②點擊Selenium Window下方的airtest_touch按鈕
在瀏覽器頁面上截取你想要進行斷言的圖片,雙擊完成截圖,腳本編輯窗口會自動生成1條圖像識別斷言腳本
driver.assert_template(Template(r"tpl1582032716811.png", record_pos=(0.51, 1.315), resolution=(100, 100)), "成功打開airlab官網")
關於Selenium更多的斷言實例,詳看我們之前的推文“測試同學都應該知道的斷言知識...。
值得注意的是,這兩個接口是基於Airtest框架的圖像識別封裝,如果圖像腳本運行時在網頁中找不到對應圖像,會拋出Target not found on screen
的異常。
多標簽頁錄制
selenium提供了切換標簽頁的接口。
driver.switch_to.window(driver.window_handles[number])
這個語句執行后,可以切換到第number個打開的標簽頁。但是對於用戶來說,這個接口不是那么好理解與調用,因為這樣需要記住標簽打開的順序。
而大部分時候,切換標簽頁的操作一般都出現在:打開新窗口、關閉標簽頁這兩種情況下。因此,Airtset-Selenium封裝了兩個接口:
driver.switch_to_new_tab() driver.switch_to_previous_tab()
在這個接口內部,Airtest-Selenium維護了標簽頁的組織結構。用戶只需在打開新標簽頁時,調用switch_to_new_tab
。
另外在結束當前標簽頁時,回到上一個標簽頁時,調用switch_to_previous_tab()
即可,不再需要去考慮當前是第幾個這樣之類的問題。
生成報告
被Airtest-Selenium封裝的接口,運行過后都會生成對應的報告,在AirtestIDE中可以直接點擊生成報告按鈕,即可查看對應的報告內容。
小結
我們以1個小的實戰案例來總結今天講述的內容:
# -*- encoding=utf8 -*- __author__ = "19617" from airtest.core.api import * from selenium import webdriver from selenium.webdriver.common.keys import Keys from airtest_selenium.proxy import WebChrome driver = WebChrome() driver.implicitly_wait(20) driver.get("https://airlab-gl.163.com/b2b") driver.maximize_window() driver.assert_template(Template(r"tpl1582032716811.png", record_pos=(0.51, 1.315), resolution=(100, 100)), "成功打開airlab官網") driver.airtest_touch(Template(r"tpl1582034527805.png", record_pos=(8.975, 5.765), resolution=(100, 100))) driver.switch_to_new_tab() driver.switch_to_previous_tab() driver.quit()