關鍵字:不變的、重複的、規範的
1)任務測試明確,需求不會頻繁變動
2)專案週期要夠長
3)自動化測試腳本可重複使用,例如:比較頻繁的迴歸測試
4)被測軟體系統開發比較規範,能夠保證系統的可測試性
#5 )軟體系統介面穩定,變動少
6)專案進度壓力不太大
是指把一個具體的頁面轉換為程式語言當中的一個對象,頁面特性轉化成對象屬性,頁面操作轉化為對象方法。
1)通俗來講把每個頁面當成一個對象,頁面層寫定位元素方法和頁面操作方法
2)用例層從頁面層調用操作方法,寫成用例
3)可以做到定位元素與腳本的分離
4)主要用來實現對頁面操作和測試邏輯的一個分離
1)要封裝頁面中的功能或服務,例如點擊頁面元素,可以進入到新的頁面,則可為這個服務封裝方法"進入新頁面"
2)封裝細節,對外只提供方法名或接口,盡量不要暴露頁面的內部
3)封裝的操作細節中不要使用斷言,把斷言放到單獨的模組中,
4)點選一個按鈕會開啟新的頁面,可以用return方法跳轉,例如return MainPage()表示跳到首頁
5)整個PO 你不需要封裝整個頁面的行為,用到什麼邏輯就封裝什麼
6)一個動作可能產生不同結果,例如點擊按鈕後,可能成功,也可能失敗,為兩種結果封裝兩個方法:click_success和click_error
都是不定長參數,解決參數不固定問題。
args是非關鍵字參數,用於元組;kwargs是關鍵字參數(字典)
#也就是說args表示任何多個無名參數,然而kwags表示一個有著對應關係的關鍵字參數。
在使用的時候需要注意,*args要在**kwags之前,不然會發生語法錯誤。
垃圾回收機制(Garbage Collection),簡稱GC,是Python解釋器自帶的機制,專門用來進行垃圾回收。
在定義變數時,會申請記憶體空間,當變數使用完畢,也應該釋放掉該變數所佔用的記憶體空間,Python則由GC機制回收。
無論何種垃圾回收機制,一般都分為兩個階段:垃圾偵測與垃圾回收。
垃圾偵測,就是區分已分配記憶體中的「可回收」和「不可回收」記憶體。
垃圾回收,則是讓作業系統重新掌握垃圾偵測階段所識別出來的可回收記憶體區塊。
所謂垃圾回收,並不是直接把這塊記憶體的資料直接清空了,而是將使用權重新交給了作業系統,不會應用程式霸占了。
什麼是垃圾
1)當變數調用完畢,且後續不再需要時,就是垃圾。
2)當指向該變數位址的變數名稱指向另一個位址時,原變數記憶體位址無法被訪問,此時該變數也是垃圾。
首先selenium是無法操作隱藏元素的(但是能正常定位到),本身這個框架就是設計如此,如果非要去操作隱藏元素,那就用js的方法去操作,selenium提供了一個入口可以執行js腳本。
元素的屬性隱藏和顯示,主要是由 type="hidden"和style="display: none;"屬性來控制的。
簡單來說,兩個都可以實現退出瀏覽器session功能。
close只會關閉瀏覽器,而quit關閉全部瀏覽器的同時,也會殺掉驅動程序
ElementNotSelectableException :元素不能選擇異常
ElementNotVisibleException :元素不可見異常
NoSuchAttributeException :沒有這樣屬性異常
#NoSuchElementException:沒有該元素異常
NoSuchFrameException :沒有該frame異常
TimeoutException : 逾時例外
Element not visible at this point :在目前點元素不可見
1)先用switch_to_alert()方法切換到alert彈出框上
2)可以用text方法取得彈出的文字資訊
3)透過accept()點擊確認按鈕
4)透過dismiss()點擊取消按鈕,取消彈出框
5)透過text()取得彈出視窗的文字
句柄:視窗的唯一識別
1)先取得目前視窗的句柄driver.current_window_handle
2)再取得所有的視窗句柄driver.window_handle
3)循環判斷是否是想要操作的窗口,如果是就可以對視窗進行操作;如果不是就使用driver.switch_to_window方法跳到新的視窗。
Selenium中沒有提供原生的方法來判斷元素是否存在,一般我們可以透過定位元素 異常捕獲的方式來判斷。
1)執行緒等待(強制等待)如time.sleep(2):執行緒強制休眠2秒鐘,2秒過後,再執行後續的程式碼。建議少用。
2)imlicitlyWait(隱式等待)會在指定的時間範圍內不斷的尋找元素,直到找到元素或逾時,特點是必須等待整個頁面載入完成。
3)WebDriverWait(明確等待)通常是我們自訂的函數程式碼,這段程式碼用來等待某個元素載入完成,再繼續執行後續的程式碼。
1)使用WebDriverWait()顯性等待,等待元素載入出來後,再進行元素運算。
2)盡量減少不必要的操作:可以直接存取頁面的,不要透過點擊操作來存取
#3)有些頁面載入時間過長,可以考慮中斷載入
#4)開發人員規範開發習慣,例如給頁面元素加上唯一的name、id等。
1)使用顯性等待,減少強制等待或隱性等待的使用。
2)減少不必要的操作步驟。
3)如果頁面載入的內容太多,就設定逾時時間,中斷頁面載入。
1)在經常偵測失敗的元素前盡量加上明確等待時間,等要操作的元素出現之後再執行下面的操作。
2)多用try 捕捉,處理異常
3)盡量使用測試專用環境,避免其他類型的測試同時進行,對資料造成乾擾
自動化測試案例的執行策略是要看自動化測試的目的,通常有以下幾種策略:
#1)自動化測試案例是用來監控的,在此目的下,可以把自動化測試案例設定成定時執行的,如果每五分鐘或一個小時執行一次,在jenkins上建立一個定時任務即可。
2)必須回歸的用例。把測試案例設定成觸發式執行,在jenkins上將自動化測試任務綁定到開發的build任務。當開發人員在模擬環境上部程式碼的時候,自動化測試案例就會被觸發執行。
3)不需要經常執行的測試案例。像是全量測試案例,沒必要一直回歸執行,有些非主要業務線也不需要時時回歸。這類測試案例採用人工執行,在jenkins創建一個任務,需要執行的時候人工去建置即可。
持續整合是一種軟體開發實踐,即團隊開發成員經常將程式碼整合到主幹,也意味著每天可能會發生多次整合。
它的好處主要有兩個:
1)快速發現錯誤。每完成一點更新,就整合到主幹,可以快速發現錯誤,定位錯誤也比較容易。
2)防止分支大幅偏離主幹。如果不是經常集成,主幹又在不斷更新,會導致以後集成的難度變大,甚至難以集成。
目的:
持續整合的目的,就是讓產品可以快速迭代,同時也能維持高品質。它的核心措施是,程式碼整合到主幹之前,必須通過自動化測試。只要有一個測試用例失敗,就無法整合。
介面測試需要,UI自動化不需要
8 種,分別是:id、name、class name、tag name、link text、partial link text、xpath、css
我最常用的是xpath(或CssSelector)
因為很多情況下,html 標籤的屬性不夠規範,無法透過單一的屬性定位,這個時候就只能使用xpath 可以去重實現定位唯一element
事實上定位最快的是Id,因為id是唯一的,然而大多數開發並沒有設定id。
屬性動態變化是指該element 沒有固定的屬性值,所以只能透過相對位置定位例如透過xpath 的軸,找到該元素的父節點或子節點等方式
##21 、點擊連結以後,selenium是否會自動等待該頁面載入完畢? 不會的。 所以有的時候,當selenium並未載入完一個頁面時,去請求頁面資源,則會誤報不存在此元素。所以首先我們應該考慮判斷,selenium是否載入完此頁面。其次再透過函數查找該元素。 (使用顯示等待,等待頁面載入後再去操作元素)
2)xpath的語法也可以定位到
以上是Python自動化測試面試常見問題及答案的詳細內容。更多資訊請關注PHP中文網其他相關文章!