Protractor 快速指南
¶Protractor 快速指南
¶E2E 測試的觀念
E2E 測試,主要是測試使用者操作與想要的結果是否符合規格。
所以,需要連上一個可測試的使用者介面的環境
抓到畫面上的資訊,再判斷是否正確
¶安裝
要把它當作是一個主程式,而不是開發工具。
它有自己的程式進入點。
npm install protractor |
測試是否安裝成功
npx protractor --version |
要將 Selenium Server 跑起來,所以要先更新它
還要另外安裝 JDK
npx webdriver-manager update |
¶使用前置步驟
¶先準備的第一個測試
依照官網的教學[1],要拿 http://juliemr.github.io/protractor-demo/ 來測試
先寫 conf.js
再寫 spec.js
conf.js
Protractor 執行時,要使用的設定
1 | // conf.js |
spec.js
對於測試內容的操作腳本。使用 JavaScript 撰寫
1 | // spec.js |
¶執行測試環境
npx webdriver-manager start |
測試環境 http://localhost:4444/wd/hub
¶執行
npx protractor conf.js |
¶Page Object Pattern 架構
參考 Using Page Objects to Organize Tests
這是個 e2e 測試常見的 pattern
原本沒有 page object
1 | describe('angularjs homepage', function() { |
改成有 page object
有 async/await
的 code
1 | var angularHomepage = require('./AngularHomepage'); |
conf.js
可以把測試 腳本 (spec) 和頁面 (page) 分離。
並且可以一套一套的執行腳本。不用每一次都跑全部
1 | exports.config = { |
¶各種語法查詢
參考: https://www.protractortest.org/#/api
¶element
Dom 元素
主要是代表抓到的 Dom 元素
抓單一個用 element()
抓列表用 element.all()
參數要丟 locator
物件
$('.parent')
=element(by.css('.abc'))
$$('.abc')
=element.all(by.css('.abc'))
element() methods
methods | descripts | return |
---|---|---|
.getText() |
類似 innerText |
回傳 promise |
.getAttribute() |
||
.isPresent() |
是否存在 | |
.element() |
繼續往下找 | |
.sendKeys() |
keyin | |
.click() |
mouse click |
element.all() methods
methods | descripts |
---|---|
.first() |
最後放進 list 裡的 |
.last() |
最早放進 list 裡的 |
.filter(callback) |
|
.map(callback) |
|
.count() |
總數 |
.get(n) |
取得第幾個 正數正數,負數倒數 |
.then(callback) |
抓到之後要做什麼 |
¶locator
更多看這個 Using Locators
用 by
的 methods 產生各種 locator,放進 element 可以取得元素。
1 | element(by.css('')) // like querySelector() |