Protractor核心API
本章將幫助您瞭解各種核心API,這些API是Protractor執行的關鍵。
Protractor API的重要性
Protractor提供給我們廣泛的API,這些API對於執行以下操作以獲取網站的當前狀態非常重要:
- 獲取我們將要測試的網頁的DOM元素。
- 與DOM元素互動。
- 為它們分配操作。
- 與它們共享資訊。
為了執行上述任務,瞭解Protractor API非常重要。
各種Protractor API
眾所周知,Protractor是Selenium-WebDriver的包裝器,Selenium-WebDriver是Node.js的WebDriver繫結。Protractor具有以下API:
瀏覽器 (Browser)
它是WebDriver例項的包裝器,用於處理瀏覽器級別的命令,例如導航、頁面範圍的資訊等。例如,browser.get方法載入頁面。
元素 (Element)
它用於搜尋和與我們正在測試的頁面上的DOM元素互動。為此,它需要一個用於定位元素的引數。
定位器 (by)
它是一組元素定位器策略。例如,可以透過CSS選擇器、ID或任何其他與ng-model繫結的屬性來查詢元素。
接下來,我們將詳細討論這些API及其功能。
瀏覽器API (Browser API)
如上所述,它是WebDriver例項的包裝器,用於處理瀏覽器級別的命令。它執行各種功能,如下所示:
函式及其描述
ProtractorBrowser API 的函式如下:
browser.angularAppRoot
此Browser API函式設定我們將查詢Angular的元素的CSS選擇器。通常,此函式位於“body”中,但如果我們的ng-app位於頁面的子部分,則它也可能是一個子元素。
browser.waitForAngularEnabled
此Browser API函式可以設定為true或false。顧名思義,如果此函式設定為false,則Protractor將不會等待Angular $http和$timeout任務完成,然後再與瀏覽器互動。我們也可以在不更改狀態的情況下透過呼叫waitForAngularEnabled()(不傳遞值)來讀取當前狀態。
browser.getProcessedConfig
藉助此browser APIs函式,我們可以獲取當前正在執行的已處理配置物件,包括規範和功能。
browser.forkNewDriverInstance
顧名思義,此函式將派生另一個瀏覽器例項,用於互動式測試。它可以在啟用和停用控制流的情況下執行。下面分別給出兩種情況的示例:
示例1
執行**browser.forkNewDriverInstance()**並啟用控制流:
var fork = browser.forkNewDriverInstance(); fork.get(‘page1’);
示例2
執行**browser.forkNewDriverInstance()**並停用控制流:
var fork = await browser.forkNewDriverInstance().ready; await forked.get(‘page1’);
browser.restart
顧名思義,它將透過關閉瀏覽器例項並建立一個新的例項來重新啟動瀏覽器。它也可以在啟用和停用控制流的情況下執行。下面分別給出兩種情況的示例:
**示例1** - 執行**browser.restart()**並啟用控制流:
browser.get(‘page1’); browser.restart(); browser.get(‘page2’);
**示例2** - 執行**browser.forkNewDriverInstance()**並停用控制流:
await browser.get(‘page1’); await browser.restart(); await browser.get(‘page2’);
browser.restartSync
它類似於browser.restart()函式。唯一的區別是它直接返回新的瀏覽器例項,而不是返回一個解析為新的瀏覽器例項的promise。只有在啟用控制流時才能執行它。
**示例** - 執行**browser.restartSync()**並啟用控制流:
browser.get(‘page1’); browser.restartSync(); browser.get(‘page2’);
browser.useAllAngular2AppRoots
顧名思義,它僅與Angular2相容。在查詢元素或等待穩定性時,它將搜尋頁面上所有可用的Angular應用程式。
browser.waitForAngular
此browser API函式指示WebDriver等待Angular完成渲染並且沒有未完成的$http或$timeout呼叫,然後再繼續。
browser.findElement
顧名思義,此browser API函式將在搜尋元素之前等待Angular完成渲染。
browser.isElementPresent
顧名思義,此browser API函式將測試元素是否存在於頁面上。
browser.addMockModule
每次呼叫Protractor.get方法時,它都會新增一個模組以便在Angular之前載入。
示例
browser.addMockModule('modName', function() {
angular.module('modName', []).value('foo', 'bar');
});
browser.clearMockModules
與browser.addMockModule不同,它將清除已註冊的模擬模組列表。
browser.removeMockModule
顧名思義,它將刪除一個已註冊的模擬模組。例如:browser.removeMockModule('modName');
browser.getRegisteredMockModules
與browser.clearMockModule相反,它將獲取已註冊的模擬模組列表。
browser.get
我們可以使用browser.get()將瀏覽器導航到特定的網路地址,並在Angular載入之前為該頁面載入模擬模組。
示例
browser.get(url);
browser.get('https://:3000');
// This will navigate to the localhost:3000 and will load mock module if needed
browser.refresh
顧名思義,這將重新載入當前頁面並在Angular之前載入模擬模組。
browser.navigate
顧名思義,它用於將導航方法混合到導航物件中,以便像以前一樣呼叫它們。例如:driver.navigate().refresh()。
browser.setLocation
它用於使用頁面內導航瀏覽到另一個頁面。
示例
browser.get('url/ABC');
browser.setLocation('DEF');
expect(browser.getCurrentUrl())
.toBe('url/DEF');
它將從ABC頁面導航到DEF頁面。
browser.debugger
顧名思義,這必須與protractor除錯一起使用。此函式基本上向控制流新增一個任務,以暫停測試並將輔助函式注入瀏覽器,以便可以在瀏覽器控制檯中進行除錯。
browser.pause
它用於除錯WebDriver測試。我們可以在測試中使用**browser.pause()**從控制流中的該點進入protractor偵錯程式。
示例
element(by.id('foo')).click();
browser.pause();
// Execution will stop before the next click action.
element(by.id('bar')).click();
browser.controlFlowEnabled
它用於確定控制流是否啟用。