Javascript 量角器/js端到端测试使用异步命令在Promise之前停止执行
下面的场景是在主页上缓存(记住)表记录的给定元素的值,单击此记录后,断言在第二页上显示相同的内容 我假设测试在回调返回之前完成 情景:Javascript 量角器/js端到端测试使用异步命令在Promise之前停止执行,javascript,testing,protractor,e2e-testing,Javascript,Testing,Protractor,E2e Testing,下面的场景是在主页上缓存(记住)表记录的给定元素的值,单击此记录后,断言在第二页上显示相同的内容 我假设测试在回调返回之前完成 情景: var Q = require('q'); module.exports = { beforeEach: function (browser) { if (!browser.globals.isLocal) { var loginSite = browser.page.loginSite(); loginSite.na
var Q = require('q');
module.exports = {
beforeEach: function (browser) {
if (!browser.globals.isLocal) {
var loginSite = browser.page.loginSite();
loginSite.navigate();
loginSite.logIn();
}
var welcomePage = browser.page.welcomePage();
welcomePage.navigate();
welcomePAge.waitForElementVisible('@usersButton', browser.globals.firstLoadWaitInMs)
.click('@usersButton');
},
afterEach: function (browser, done) {
browser.end(function() {
done();
});
},
'should display same data on second page as on first page': function (browser) {
//Given
var firstPage = bowser.pages.first()
//When
Q.all([
firstPage.getTextPromise('@element1'),
firstPage.getTextPromise('@element2'),
firstPage.getTextPromise('@element3')]
).then( function(values) {
users.click('@linkToSecondPage');
//Then
var secondPage = browser.page.secondPage();
secondPage.expect.element('@dataElement1').text.to.equal(values[0]).before(5000);
secondPage.expect.element('@dataElemnet2').contains.text(values[1]);
secondPage.expect.element('@dataElement3').contains.text(values[2]);
});
} }
getTextPromise命令由我按照以下方式定义:
commands: [{
getTextPromise: function(selector) {
var self = this;
return Q.Promise(function (resolve, reject) {
self.getText(selector, function(result) {resolve(result.value); });
});
} }]
还尝试使用
async.series
库解决它-我的意思是将一些步骤打包到单独的函数中并按顺序运行,但遇到了这样一个问题,即函数中的所有内容都是此函数的本地内容,因此无法在下一个函数中调用。所以当第二个页面需要运行时,您的值
数组为空?或者,您的第二个页面expect语句甚至在第二个页面打开之前就已经运行了?我认为没有执行ar firstPage=bowser.pages.first()
下的任何内容。同时尝试console.log(值[0])
,但没有结果。@GirishSortur我也认为这不是getTextPromise
方法的错,因为它实现了简单的getText
,并且工作正常。例如,这样的代码工作正常(意味着console.log中返回值):var deferred=new Q.deferred();函数getName(){var name=userDetails.getText('@userDetailsFirstName',函数(result){var name=result.value;console.log(name);});deferred.resolve(name);}