前段時間完成一塊測試,記錄下寫cypress的記錄
1,cy.wait() 等待
(1)1000等於1秒,此指令我用於兩個場景比較多,第一個場景只用於等待時間,比如以下這種場景,當你點擊 Hover me 的時候,下面的二級菜單才會顯示出來,但是如果二級菜單不是寫固定的,而是接口式的。這樣點擊 Hover me 的時候,如果數據沒有及時顯示出來,這樣測試就會報錯,告訴你沒有找到二級菜單的元素。這個時候可以用cy.wait() 來等待一下,等待幾秒鍾之后,再去找二級菜單的元素。

(2) 第二個場景經常用於調用接口。和cy.server()和cy.route() 一起使用的時候。比如如下這種場景

一般項目里面就有這種場景,點擊一個按鈕的時候,出來一個警告信息,比如提交成功或者提交失敗的警示信息。 失敗和成功是兩個接口,你需要調用接口的時候,把成功的提示信息和失敗的提示信息在測試里面的顯示出來的時候,就需要用到cy.server() 和cy.route() 和cy.wait() 的結合。
cy.server():啟動服務器以開始將響應路由到cy.route()網絡,並更改網絡請求的行為。
cy.route(); 使用cy.route管理網絡請求。
如果你不寫cy.server() 后面的cy.route() 是沒有效果的。在cy.route() 里面設置好請求頭和接口的地址,通過as()重新命令一個別名。
后續使用cy.wait()可以等待這個請求。
cy.server({ headers: { 'x-token': 'abc-123-foo-bar' } }) cy.route('GET', '/users/1', { id: 1, name: 'Amanda' }).as('getUser') cy.visit('/users/1/profile') cy.wait('@getUser').its('responseHeaders') .should('have.property', 'x-token', 'abc-123-foo-bar') // true
2 關於cy.route() 請求
可以在你寫的測試用例的文件夾下建一個一個routes.js 文件,里面可以專門用來寫你的route的配置。




圖一為Cypress.env() 需要定義一個環境變量,再定義一個判斷的值,用 cosnt 定義一個Response ,里面 可以根據code,title和message來進行定義和判斷。我定義的code為0和其他,依此來判斷是請求成功和失敗的參數。
圖二為頂一個route。.as() 是給此路由一個別名,我的.as()的別名和const的定義名字是一樣的,cy.route 里面
method 為請求的方式,url為請求的地址,reponse 后面是圖一你定義的Response.SUCCES。來確定此路由是成功的還是失敗的。
圖三是你在你的測試js文件里面引入,當前文件的上面要用 import {}from './routes' 進行引入。
必須要用cy.server 作為開頭,后面cy.visitWithBeforeLoad() 后面進入的一個路徑,個人理解是有些接口我們需要先調用,所有先進入這個路徑,把相關的接口調用出出來,有的需要有的不需要,如果不需要,cy.server()后面的就是你route的別名,這樣就完成了。cy.route()沒有完全理解,先記錄一下,后續徹底理解了,會單獨再寫一篇。
二 。語法規范
(1)使用cy.wait() 的時候,在你的文件最開頭要開一段話
如果不加的話,那么你提交代碼的時候,git就會報錯,而且必須是 /* */ 不能是//
(2)cy.get() 獲取標簽的時候,不能使用UI的類名,因為會獲取到多個,所以盡量不要使用UI的類名,可以使用cy.get(div[class = ""]) 類似 於這種減少獲取多個的可能性,保證唯一性。另外有很多class名字是那種隨時的,就是那種每次網頁一刷新,class名字就是變化的,這種class名字大多就有自己的特點,例如 index____開頭 后面也是____ 中間的名字不會換,那這樣你可以用 cy.get('div[class *= "" ]') 來獲取。
(3)寫的測試用例的文件夾名字和測試里面每一塊語義化,需要讓別人知道你的這個文件夾用來測試什么的,每一塊是用來干什么。
