原創(chuàng)|行業(yè)資訊|編輯:鄭恭琳|2020-06-08 14:47:53.260|閱讀 352 次
概述:UI記錄工具可能令人沮喪,但不一定如此。通過一些快速的技巧和竅門,可以減輕邊緣情況的麻煩,使您能夠更輕松地擴展UI測試自動化。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
UI記錄工具可能令人沮喪,但不一定如此。通過一些快速的技巧和竅門,可以減輕邊緣情況的麻煩,使您能夠更輕松地擴展UI測試自動化。
測試人員采用測試自動化(尤其是UI測試自動化)來加快重復的測試動作,并將手動工作集中在發(fā)現(xiàn)新的有趣問題上。借助UI測試自動化,您可以定義應用程序要采用的不同路徑,并且機器可以以連續(xù)且自動化的方式驗證應用程序,而無需人工完成。
建立自動化測試的主要方法是編寫代碼。這可能是不幸的,因為知道如何手工遍歷應用程序的測試人員必須學習如何使用諸如Selenium之類的框架來編寫代碼,或者使用諸如UFT之類的專有工具來創(chuàng)建一個自動工作流,以反映他們正在手動執(zhí)行的工作流。由于代碼本質上容易出錯,并且編寫自動化測試可能需要相當復雜的技能,因此這可能會很快成為挑戰(zhàn)。
為了緩解挑戰(zhàn),許多工具(包括的UI測試自動化工具)都具有記錄和播放Web場景的功能。這些工具從理論上講很棒,但是一個很大的問題是大多數(shù)記錄器在80%的時間內都無法記錄和回放準確的場景。這是一個不幸的現(xiàn)實,但是隧道盡頭有光明。這是所有錄制工具面臨的一些常見挑戰(zhàn),以及可以用來解決這些問題的一些技巧。
Web應用程序行為的不一致是錄制和播放技術將面臨的首要挑戰(zhàn),并且很難克服。發(fā)生這種情況的幾種不同原因,以及一些可以幫助您診斷和潛在解決問題的技術。
問題1:即使您不知道該應用程序的狀態(tài),該應用程序仍處于特定狀態(tài)。
軟件開發(fā)人員使用瀏覽器cookie來存儲Web應用程序特定用戶的會話信息,或跟蹤相關應用程序之間的會話。Cookies可用于檢索有關用戶的信息,而無需將信息存儲在后端系統(tǒng)中。Cookie記錄數(shù)據(jù),例如用戶的瀏覽器以前訪問過該Web應用程序的事實,或有關用戶當前會話的信息。
出于自動化目的,現(xiàn)有的cookie可能容易引起問題。諸如Selenium之類的測試自動化框架通常以“干凈”狀態(tài)啟動瀏覽器,其中已刪除所有cookie。如果您錄制的測試中存在Cookie,則該Web應用程序在播放過程中的行為將與錄制時不同,并且錄制的測試可能會失敗。
一個示例是存儲在Cookie中的會話數(shù)據(jù),該數(shù)據(jù)允許用戶在瀏覽器會話之間保持登錄到Web應用程序的狀態(tài)。如果您已經登錄就開始記錄,則記錄的測試用例中不會捕獲任何登錄信息。在播放期間,將不存在任何cookie,因此應用程序將立即轉到登錄頁面,并且測試將失敗。
當元素在回放過程中出現(xiàn)在頁面上而在錄制過程中沒有出現(xiàn)時,會發(fā)生同樣的問題。許多網絡應用程序會在用戶首次訪問時顯示通知,例如有關應用程序使用Cookie的GDPR通知,或顯示特殊交易、銷售或新聞簡報注冊機會的彈出式div。在這種情況下,錄制的場景的回放將失敗,因為在錄制過程中沒有出現(xiàn)其他頁面元素,因此測試不知道如何與其他元素進行交互。
這是減輕麻煩的方法......
解決方案:以隱身/私人模式錄制和播放
可以將大多數(shù)瀏覽器設置為以隱身/私有模式啟動。在此模式下運行時,Cookie和配置文件信息將被刪除,因此該Web應用程序的行為就像您第一次訪問時一樣,并且您尚未登錄。使用以隱身/私有模式啟動的瀏覽器記錄您的測試方案,并且您將為記錄的測試方案提供一個干凈的基準。在Chrome中,設置如下所示:
創(chuàng)建測試腳本后,通常可以允許它以正常模式播放。但是,在某些情況下,以隱身/私人模式播放可能會有所幫助。一個示例就是一個Web應用程序,它使用您當前的位置來自定義頁面上的體驗。我發(fā)現(xiàn)有些情況下,在硒測試的回放過程中檢索到的當前位置與錄制過程中檢索到的位置有所不同(我不確定為什么)。以隱身/私人模式播放將阻止瀏覽器獲取您的當前位置,并穩(wěn)定您的測試場景。在Selenium中,您可以指示以隱身/私有模式進行播放-查看這些方便的Chrome和Firefox鏈接。
解決方案:設置特定的Cookie
如果您需要適當?shù)?/span>cookie以確保在特定狀態(tài)下以Web應用程序開始播放,這可能會很有用。這是一篇很棒的論壇帖子,概述了在播放時捕獲和設置特定Cookie的過程。
問題2:更改屏幕尺寸
響應式Web設計的現(xiàn)代Web應用程序開發(fā)實踐在自動測試創(chuàng)建過程中引起了問題。為了使Web應用程序可同時在移動設備和臺式機上使用,開發(fā)人員創(chuàng)建了響應式應用程序,該應用程序根據(jù)屏幕尺寸而變化。當您調整窗口大小并且UI完全更改時,您會看到此信息。想象一下這對自動化測試有何作用!
如果您在最大化的窗口中記錄測試,然后在一半大小的窗口中進行回放,則由于瀏覽器大小的不同,頁面元素可能會被隱藏或遮蓋。當播放機上的分辨率與錄制機上的分辨率不同時,也會發(fā)生類似的效果。無論哪種方式,它都會對您的測試自動化產生很大影響。
這是減輕麻煩的方法......
解決方案:最大化瀏覽器的播放效果
您可以使用Selenium命令來最大化瀏覽器的大小:
driver.manage().window().maximize();
options.addArguments("start-maximized”)
最大化瀏覽器可確保頁面全尺寸,并且在頁面上為該配置安排了元素。假設您以最大的屏幕尺寸進行錄制,即使進行播放的機器使用不同的分辨率,錄制和播放之間的元素通常也會保持一致。
作為人類,當我使用Web應用程序時,我會尋找特定的元素,并在這些元素“就緒”時與它們交互。在自動化測試中,機器要知道什么時候該做什么與什么時候該去做比較困難。
自動化測試工具將測試場景作為一系列步驟來執(zhí)行。例如,在針對Amazon執(zhí)行購物車測試時,下一步可能是將商品添加到購物車,然后單擊購物車按鈕。問題在于,添加商品后,購物車按鈕可能無法立即使用,并且圖標可能會立即更改。測試腳本需要確切地知道要等待的正確時間,或者要前進的條件。測試中處理此問題的配置通常稱為“等待條件”。記錄員很難理解要在測試腳本中創(chuàng)建哪些等待條件,因此您必須在測試中手動構建復雜的等待條件。
這是減輕麻煩的方法......
解決方案:使用顯式等待
顯式等待是在單個元素上設置的等待條件,指示Selenium WebDriver等待直到滿足特定條件——例如等待元素在頁面上出現(xiàn)或可見。等待條件指定等待條件滿足的最長時間。
每當測試嘗試查找元素時,請使用顯式等待。如果根本沒有使用任何等待條件,那么如果元素沒有立即以正確的狀態(tài)出現(xiàn),則測試將失敗。Selenium WebDriver還支持隱式等待條件,該條件在整個測試場景中全局設置,并在測試嘗試查找元素時使用。但是,不建議隱式等待。有關顯式和隱式等待,請參見Selenium文檔。
使用顯式等待時,Selenium可能會引發(fā)異常,從而中斷等待條件-但實際上您希望在這些情況下繼續(xù)等待條件。您可以通過配置顯式等待來忽略特定異常來處理此問題。需要忽略的一些常見異常是NoSuchElementException,StaleElementReferenceException和ElementClickInterceptedException。
這是忽略這些異常之一的顯式等待的一個好例子:
WebDriverWait wait = new WebDriverWait(driver, DEFAULT_WAIT_FOR_ELEMENT_TIMEOUT);
wait.ignoring(StaleElementReferenceException.class);
wait.until(ExpectedConditions.elementToBeClickable(element);
Web應用程序記錄器試圖為記錄的測試中引用的每個頁面元素構建一個良好的元素定位器,但是在許多情況下,記錄下來的定位器并不理想。例如,記錄的定位器可能會引用每次訪問頁面時都會更改的動態(tài)信息,或者在以后修改頁面的不相關部分時容易產生中斷。
常見的示例可能是:
<div id="gwt-uid-198">Click here for more info</div>
<a href="/logout.jsp">Logout user (bob)</a>
這是減輕麻煩的方法......
解決方案:創(chuàng)建智能定位器
識別包含動態(tài)信息的元素定位器通常非常容易。當您回放錄制的場景時,這些定位器將失敗,因為它們所依賴的動態(tài)信息是不同的。要處理這些情況,您需要找到可在元素定位器中使用的頁面元素的唯一標識屬性,而不是已記錄的動態(tài)屬性。
一種方法是在瀏覽器中手動導航到該元素出現(xiàn)的頁面,然后右鍵單擊該元素并選擇菜單選項以檢查該元素(在Chrome中稱為Inspect,在Firefox中稱為Inspect Element)。這將帶您進入DOM結構,該結構將允許您查看該元素的基礎DOM和HTML代碼。在此視圖中,您可以標識用來標識元素的其他屬性。要查找的常見屬性是“類”、“名稱”、“標題”和“ alt”,但是這些屬性也可能是動態(tài)的,您應該選擇一個或多個唯一標識元素的屬性。在某些情況下,可以在父元素上找到最能唯一地標識元素的屬性,因此您可能需要創(chuàng)建相對xpath,例如:
//div[@class=’actionButton’]/button
另一種方法是使用工具,該工具可以為您提供各種定位器選項,您可以從中選擇一個,然后根據(jù)需要進行調整。想到的一些特定工具是SeleniumIDE和TruePath,它們兩者都可以創(chuàng)建可用于標識元素的多個不同的定位器。您可以按原樣使用定位器,也可以選擇一個定位器并對其進行修改以適合您的需求。
第三種選擇是使用,以在測試由于定位器損壞或運行時損壞的定位器自愈而失敗時生成更好的定位器建議。將使用來自先前測試執(zhí)行的歷史數(shù)據(jù)以及有關頁面當前狀態(tài)的信息來建議您可以使用的一組不同的定位器,以及對每個定位器的信心。
除了我已經提到的內容之外,從記錄創(chuàng)建測試方案時還會出現(xiàn)許多其他常見情況。以下是一些其他技巧,可以使使用UI錄制工具的麻煩減輕。
記錄懸停動作
傳統(tǒng)上,記錄和播放工具很難捕獲用戶將鼠標置于另一個元素上時出現(xiàn)的頁面元素。通常不會記錄懸停操作,但是會記錄與出現(xiàn)的元素的交互。運行測試方案時,不會發(fā)生懸停操作,并且測試方案中定義的下一頁元素將永遠不會出現(xiàn)——這會使測試失敗。
為了減輕這種麻煩,請在記錄過程中注意懸停動作顯示其他元素的位置,當您看到其中一種情況時,請單擊該元素,而不是簡單地將其懸停在該元素上。這將導致單擊操作被記錄到該頁面元素的測試中。如果要使測試懸停而不是單擊元素,請在事實之后將測試中的單擊動作更改為懸停動作。這是一篇可以幫助您解決此問題的文章。
滾動
錄制時,您經常需要滾動頁面元素使其進入視圖以與其進行交互。錄制工具通常不錄制滾動操作,并且不需要,因為Selenium通常會為您處理滾動。但是,在某些情況下,當回放測試時,Selenium不會將頁面元素滾動到視圖中,并且測試將失敗,因為該元素不可見。為了減輕這種麻煩,請稍后使用JavaScript執(zhí)行程序手動添加滾動交互。這是一篇很棒的文章,可以幫助您逐步理解。
未記錄某些動作
在錄制時,元素有時會不被錄制。通常,這是由于UI框架以獨特的方式構建頁面上的元素。
為了減輕這種麻煩,請在記錄時跟蹤您正在Web應用程序上執(zhí)行的特定操作。錄制后,在Selenium腳本中標識應該執(zhí)行的操作并將其手動添加。您可以通過在瀏覽器中導航到缺少操作的頁面來標識要使用的定位器,然后使用前面提到的瀏覽器擴展之一捕獲定位器并將其手動放入測試中。
使用UI錄制工具創(chuàng)建測試場景可能會很麻煩,但這不是必須的。利用這些技術,您可以成功進行UI測試自動化實踐。祝測試愉快!
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn