我目前在量角器/硒中實現頁面對象模式。Selenium/WebdriverJs /量角器承諾鏈接頁面對象
由於量角器中的每個方法都會返回一個promise,因此Constelency中的頁面對象中的方法也應該返回promise。
此外,我的頁面對象可能具有返回另一個頁面對象或頁面對象的自定義(如LeftNavigation,MainContent)的函數。頁面對象本身不應返回,而應該在承諾中返回。目前我並不真正知道如何做到這一點。
此外,我想不使用.then(..)方法鏈我的方法調用。對於WebElements,可以在不調用.then(..)方法的情況下調用其他函數,例如,
browser.driver.findElement(By.css('#someid')).findElement(By.css('#somebutton')).click();
我也想與頁面對象模式實現這一點:
let pagePromise = AdminBaseBage.get(); // returns a Promise<AdminBasePage>
let mContent = page.mainContent;// should return a Promise<MainContent>
let titlePromise = mContent.getModuleTitle(); // returns a Promise<string>
甚至更好
AdminBaseBage.get().mainContent.getModuleTitle();
下面我PageObjects的一些問題在這裏摘錄:
AdminBasePage.js
個var LeftNavigation = require('../../pageobject/LeftNavigation.js');
var MainContent = require('../../pageobject/MainContent.js');
class AdminBasePage {
constructor() {
this._leftNavigation = new LeftNavigation();
this._mainContent = new MainContent();
}
/**
* @returns {Promise<AdminBasePage>}
*/
static getPage() {
return browser.driver.get("index.php").then(function() {
return new AdminBasePage();
});
}
/**
* @returns <LoginPage>
*/
logout() {
this.leftNavigation.logout();
return new LoginPage(); //also here I would like to return a promise.
}
/**
* @returns {LeftNavigation}
*/
get leftNavigation() {
//Instead of return the object directly, I would like to return a promise here.
//But how?
return this._leftNavigation;
};
/**
* @returns {MainContent}
*/
get mainContent() {
//Instead of return the object directly, I would like to return a promise here.
//But how?
return this._mainContent;
};
}
module.exports = AdminBasePage;
MainContent.js
class MainContent {
constructor() {
/** @type {WebElementPromise} */
this._element_mainContent = this.webDriver.findElement(By.css('#maincontent'));
}
/**
* Gets the title of the main content
*
* @returns {webdriver.promise.Promise<string>}
*/
getMainContentTitle() {
return this._element_mainContent
.findElement(By.id('moduleTitle'))
.getText();
}
}
/** @type {MainContent} */
module.exports = MainContent;
你能給什麼建議嗎? 我希望它是某種清楚什麼,我試圖解釋:-)
問候
沒有必要對所有的'.then',你應該刪除它們。 –
這就是我已經嘗試過的,但它不起作用。這就是爲什麼我使用'.then'。 當試圖執行此: '希望(page.mainContent.getPagination()getIntPaginationTotalNumber()。)toEqual(2);' 我得到的錯誤 '類型錯誤:無法讀取屬性「 getPagination'undefined' 這是因爲本例中的'page'是一個promise(參見'AdminBasePage.getPage()'方法)。 – Stefan