您現在的位置是:電腦技術吧?>? 組裝維修 ??>??探索發現筆記,探索筆記怎么開啟??>??正文詳情

探索發現筆記,探索筆記怎么開啟

壬鴻云2019-12-23 09:22:57 人圍觀
簡介紫水宮探索筆記什么是UI測試?UI測試是一個自動測試UI和交互的測試組件。UI測試有什么用?它可以通過編寫代碼或記錄開發人員的操作過程和編碼,自動點擊按鈕、查看或輸入文本。用

UI Tests是什么?  UI Tests是一個自動測試UI與交互的Testing組件  UI Tests有什么用?  它可以通過編寫代碼、或者是記錄開發者的操作過程并代碼化,來實現自動點擊某個按鈕、視圖,或者自動輸入文字等功能。

  UI Tests的重要性  在實際的開發過程中,隨著項目越做越大,功能越來越多,僅僅靠人工操作的方式來覆蓋所有測試用例是非常困難的,尤其是加入新功能以后,舊的功能也要重新測試一遍,這導致了測試需要花非常多的時間來進行回歸測試,這里產生了大量重復的工作,而這些重復的工作有些是可以自動完成的,這時候UI Tests就可以幫助解決這個問題了。

  使用方法  第一步:添加UI Tests  如果是新項目,則創建工程的時候可以直接勾選選項,如下圖

  如果是已有的項目,可以通過添加target的方式添加一個UI Tests,點擊xcode的菜單,找到target欄

  在Test選項中選擇Cocoa Touch UI Testing Bundle

  這時候test組件添加成功,它在項目中的位置如下圖所示

  第二步:創建測試代碼  手動創建測試代碼  打開測試文件,在testExample()方法中添加測試代碼

  如果不知道如何寫測試代碼,則可以參考自動生成的代碼樣式  自動生成測試步驟  選擇測試文件后,點擊錄制按鈕

  這時候開始進行操作,它會記錄你的操作步驟,并生成測試代碼  下圖就是在一些操作后自動生成的測試代碼

  這時候可以分析測試代碼的語法,以便你自己手動修改或者手寫測試代碼  開始測試  點擊testExample方法旁邊的播放按鈕,它就開始進行自動測試了,這時候你會看到app在自動操作

  下面介紹一下測試元素的語法  XCUIApplication:  繼承XCUIElement,這個類掌管應用程序的生命周期,里面包含兩個主要方法  launch():  啟動程序  terminate():  終止程序  XCUIElement:  繼承NSObject,實現協議XCUIElementAttributes, XCUIElementTypeQueryProvider  可以表示系統的各種UI元素  exist:  可以讓你判斷當前的UI元素是否存在,如果對一個不存在的元素進行操作,會導致測試組件拋出異常并中斷測試  descendantsMatchingType(type:XCUIElementType)-XCUIElementQuery:  取某種類型的元素以及它的子類集合  childrenMatchingType(type:XCUIElementType)-XCUIElementQuery:  取某種類型的元素集合,不包含它的子類  這兩個方法的區別在于,你僅使用系統的UIButton時,用childrenMatchingType就可以了,如果你還希望查詢自己定義的子Button,就要用descendantsMatchingType  另外UI元素還有一些交互方法  tap(): 點擊  doubleTap(): 雙擊  pressForDuration(duration: NSTimeInterval): 長按一段時間,在你需要進行延時操作時,這個就派上用場了  swipeUp(): 這個響應不了pan手勢,暫時沒發現能用在什么地方,也可能是beta版的bug,先不解釋  typeText(text: String): 用于textField和textView輸入文本時使用,使用前要確保文本框獲得輸入焦點,可以使用tap()函數使其獲得焦點  XCUIElementAttributes協議  里面包含了UIAccessibility中的部分屬性  如下圖

  可以方便你查看當前元素的特征,其中identifier屬性可用于直接讀取元素,不過該屬性在UITextField中有bug,暫時不清楚原因  XCUIElementTypeQueryProvider協議  里面包含了系統中大部分UI控件的類型,可通過讀屬性的方式取得某種類型的UI集合  部分屬性截圖如下

  創建Demo  首先創建一個登錄頁面

  點擊login按鈕進行登錄驗證,點擊clear按鈕會清除文本  登錄成功后可以去到個人信息頁面  個人信息頁面如下

  點擊modify按鈕可以修改個人信息,點擊Message按鈕可以查看個人消息  最后是消息界面

  登錄頁面的測試  輸入一個錯誤的賬號  驗證結果  關閉警告窗  清除輸入記錄  輸入一個正確的賬號  驗證結果  進入個人信息頁面  測試代碼如下:  func testLoginView() {  let app = XCUIApplication()  // 由于UITextField的id有問題,所以只能通過label的方式遍歷元素來讀取  let nameField = self.getFieldWithLbl(nameField)  if self.canOperateElement(nameField) {  nameField!.tap()  nameField!.typeText(xiaoming)  }  let psdField = self.getFieldWithLbl(psdField)  if self.canOperateElement(psdField) {  psdField!.tap()  psdField!.typeText(1234321)  }  // 通過UIButton的預設id來讀取對應的按鈕  let loginBtn = app.buttons[Login]  if self.canOperateElement(loginBtn) {  loginBtn.tap()  }  // 開始一段延時,由于真實的登錄是聯網請求,所以不能直接獲得結果,demo通過延時的方式來模擬聯網請求  let window = app.windows.elementAtIndex(0)  if self.canOperateElement(window) {  // 延時3秒, 3秒后如果登錄成功,則自動進入信息頁面,如果登錄失敗,則彈出警告窗  window.pressForDuration(3)  }  // alert的id和labe都用不了,估計還是bug,所以只能通過數量判斷  if app.alerts.count 0 {  // 登錄失敗  app.alerts.collectionViews.buttons[確定].tap()  let clear = app.buttons[Clear]  if self.canOperateElement(clear) {  clear.tap()  if self.canOperateElement(nameField) {  nameField!.tap()  nameField!.typeText(sun)  }  if self.canOperateElement(psdField) {  psdField!.tap()  psdField!.typeText(111111)  }  if self.canOperateElement(loginBtn) {  loginBtn.tap()  }  if self.canOperateElement(window) {  // 延時3秒, 3秒后如果登錄成功,則自動進入信息頁面,如果登錄失敗,則彈出警告窗  window.pressForDuration(3)  }  self.loginSuccess()  }  } else {  // 登錄成功  self.loginSuccess()  }  }  這里有幾個需要特別注意的點:  1. 當你的元素不存在時,它仍然可能返回一個元素對象,但這時候不能對其進行操作  2. 當你要點擊的元素被鍵盤或者UIAlertView遮擋時,執行tap方法會拋異常  詳細實現可參照demo: https://github.com/sunGd/demo/tree/master/iOS9/UITestDemo  個人信息頁測試  修改性別  修改年齡  修改心情  保存修改  測試代碼如下:  func testInfo() {  let app = XCUIApplication()  let window = app.windows.elementAtIndex(0)  if self.canOperateElement(window) {  // 延時2秒, 加載數據需要時間  window.pressForDuration(2)  }  let modifyBtn = app.buttons[modify];  modifyBtn.tap()  let sexSwitch = app.switches[sex]  sexSwitch.tap()  let incrementButton = app.buttons[Increment]  incrementButton.tap()  incrementButton.tap()  incrementButton.tap()  app.buttons[Decrement].tap()  let textView = app.textViews[feeling]  textView.tap()  app.keys[Delete].tap()  app.keys[Delete].tap()  textView.typeText( abc )  // 點擊空白區域  let clearBtn = app.buttons[clearBtn]  clearBtn.tap()  // 保存數據  modifyBtn.tap()  window.pressForDuration(2)  let messageBtn = app.buttons[message]  messageBtn.tap();  // 延時1秒, push view需要時間  window.pressForDuration(1)  self.testMessage()  }  這里需要特別注意以下兩點:  1. textview獲取焦點時無法選擇焦點的位置  2. tap事件的觸發位置是view的中心,所以當view的中心被遮擋時,要考慮使用其他view來代替  個人消息界面測試  單元格的點擊  測試代碼如下:  func testMessage() {  let app = XCUIApplication()  let window = app.windows.elementAtIndex(0)  if self.canOperateElement(window) {  // 延時2秒, 加載數據需要時間  window.pressForDuration(2)  }  let table = app.tables  table.childrenMatchingType(.Cell).elementAtIndex(8).tap()  table.childrenMatchingType(.Cell).elementAtIndex(1).tap()  }  這里需要注意一點:  1. 暫時無法獲取到tableView的元素指針  總結  總的來說,UI Tests只能用于一些基礎功能的測試,驗證app的功能是否可以正常使用,是否存在崩潰問題。

但它也有很多不足之處,編寫測試用例的過程非常繁瑣,自動生成的代碼幾乎無法運行,功能單一,很多用例無法覆蓋,而且bug很多,大大地限制了UI Tests在實際開發中的應用。

希望正式版出來的時候能夠修復這些問題,并開放更多的功能。

版權聲明:本文由 壬鴻云 整理編輯。

原標題:探尋筆記,探究筆記

轉載注明出處:http://www.dn9ww09s.icu/assemble/15631.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • asp_html,asp就是html嗎

    asp_html,asp就是html嗎 相關圖片html打開asp頁面巧用ASP語言過濾HTML元素:“過濾HTML”函數名:glhtml“函數:過濾HTML元素”參數:STR----過濾字符“返回值:無HTML字符”******asp和php...

  • mathjax基本語法,c 基本語法

    mathjax基本語法,c  基本語法 相關圖片C語言的基本語法1、 JSP元素1,腳本元素,包括表達式,代碼片段(包括內置類),聲明(成員變量和方法),注釋(輸出和隱藏)2,指令元素,包括頁(語言,擴展,導入,會話,緩沖...

  • memcache緩存,memcache本地緩存

    memcache緩存,memcache本地緩存 相關圖片memcache分布式緩存一般來說,如果并發量很小,則對不使用緩存技術沒有影響。但是,如果并發量很大,使用緩存技術就顯得非常重要,這可以降低數據庫和服務器的壓力。當然,有很多...

  • 窗口程序用什么語言,應用程序怎么打開

    窗口程序用什么語言,應用程序怎么打開 相關圖片安卓應用開發語言在應用程序中使用多語言通常有兩種方式:一是為用戶提供選擇自己語言的機會;二是根據當前用戶當前的移動設備語言自動將我們的應用程序切換到相應的語言。第...

  • c 多線程編程,多線程編程java

    c  多線程編程,多線程編程java 相關圖片java多線程編程實戰一。簡介:1.1ios有三種多線程編程技術:1。螺紋2。可可nsoperation 3。GCD全名:grjava多線程編程題...

  • 快速關鍵代碼,關鍵代碼段

    快速關鍵代碼,關鍵代碼段 相關圖片直接關機的代碼一。用于確定郵箱格式是否正確的代碼://verify-(bool)isvalidateemail:(nsstring*)email{nsstring*emailcnas關鍵代碼...

  • 什么是線程,java線程同步機制

    什么是線程,java線程同步機制 相關圖片進程和線程的區別本文主要介紹JavaScript線程和計時機制的相關信息。對于您的朋友,請參考setTimeout和setinterval的JavaScript API文檔,定java線程狀態...

  • 子網掩碼和網關,子網掩碼 網關

    子網掩碼和網關,子網掩碼 網關 相關圖片ip地址子網掩碼網關怎么填本文采用JS對IP、子網掩碼、網關和MAC進行驗證。與您分享以供參考。具體如下:?123456789101314151617181920212223252627ip地址,子網掩碼,默認網關...

  • ios框架,iOS相關框架

    ios框架,iOS相關框架 相關圖片ios網絡框架在Mac和iOS上,可可是一種快速、簡單、功能強大且靈活的日志記錄框架。Cocoa lumberjack與流行的日志框架(如log4j)類似,但它是為Objecios直播框架...

  • 應用程序是什么,安裝應用程序

    應用程序是什么,安裝應用程序 相關圖片手機應用程序在哪里Watchkit應用程序體系結構Watchkit應用程序是運行在Apple watch中的可執行文件。它包括腳本和渲染屏幕所需的資源文件。watchkit擴展是桌面應用程序...

熱評文章

  • url帶參數,url傳參數

    url帶參數,url傳參數 相關圖片url參數錯誤本文的例子描述了用JavaScript獲取URL查詢參數的方法。與您分享以供參考。具體實現方法如下:?12345678910函數getqueryvariableurl是啥...

  • weblogic并發連接數,iis最大并發連接數

    weblogic并發連接數,iis最大并發連接數 相關圖片udp并發連接數無法連接到Oracle數據庫。相關錯誤oerr:ora-12519 TNS:未找到適當的服務處理程序。客戶端連接間歇性失敗。Ora-12519原因:LIStomcat并發連接數...

  • 表格中怎么使用函數,函數在表格中怎么使用

    表格中怎么使用函數,函數在表格中怎么使用 相關圖片表格中如何用函數在使用SQL的過程中,我們偶爾會遇到需要更改數據存儲形式的情況。例如,數據庫的表(info)中有一個字段education,用于存儲JSON數組。現在,由于需求表格中函數的應...

  • 數據庫運算符,數據庫比較運算符

    數據庫運算符,數據庫比較運算符 相關圖片數據類型運算符與表達式如果您最近執行了select或update查詢,則可能會使用一個或多個MySQL比較運算符來限制查詢的輸出。比較是大多數select查詢不可分割的一部分,MyS數據庫四大運算符...

  • Android內存泄露,Android內存泄漏

    Android內存泄露,Android內存泄漏 相關圖片安卓內存溢出的原因本文主要介紹Android加載圖片時內存溢出問題的解決方案。本文介紹如何使用bitmapfactory.options解決內存溢出問題。請參考以下1。在AndrAndroid系統內存出錯怎么辦...

  • 觸動精靈腳本編寫教程,按鍵精靈腳本制作教程

    觸動精靈腳本編寫教程,按鍵精靈腳本制作教程 相關圖片腳本模板本文主要介紹編寫Python CGI腳本的教程。CGI是Python和服務器軟件之間的接口。如果你需要一個朋友,你可以參考是用Python語言創建一個web頁面手機按鍵精靈腳本制作教程...

  • excel文件亂碼怎么恢復,文檔亂碼怎么恢復

    excel文件亂碼怎么恢復,文檔亂碼怎么恢復 相關圖片導出excel表格出現亂碼CSV文件可以通過Excel打開和操作。同時,用PHP導入CSV文件非常容易,所以我們通常用PHP導出CSV,但有時用Excel打開CSV時會遇到代碼混亂的問題csv格式打開亂碼...

  • 如何建立文件夾目錄,文件目錄怎么做

    如何建立文件夾目錄,文件目錄怎么做 相關圖片在文件夾下創建文件ASP根據用戶自定義的遠程圖像地址,自動下載圖像并上傳到服務器上,只是提供了一種思路,如果熟悉ASP,可以自己擴展它。如何創建文件夾做文檔...

  • ios性能優化的點,ios性能優化設置

    ios性能優化的點,ios性能優化設置 相關圖片iOS9優化最近,主要的項目是lbs,它是主要成員的定位功能。我們的用戶界面設計是這樣的,乍一看,它看起來非常漂亮。不同的人會展示不同的化身,但當人們在人群中時,問題就來了...

  • asp是什么,asp和php

    asp是什么,asp和php 相關圖片net是啥ASP。NETC生成隨機數類文件,并根據需要生成一些隨機數。最大值和最小值可以自行設定。代碼很簡單,可以放在公共庫中進行調用。類代碼如下:asp.net和php的區別...

關注微信

变脸官网查询