Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器/js端到端测试使用异步命令在Promise之前停止执行_Javascript_Testing_Protractor_E2e Testing - Fatal编程技术网

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);}