量角器:跟踪当前规格

时间:2017-03-13 21:05:38

标签: javascript protractor

我正在使用量角器并尝试使用基于时间戳的文件名创建文件。问题是即使我使用browser.sleep()在创建时间戳(用于创建文件名)之前等待一段随机时间,文件名仍然在彼此约50ms内:

    if (instanceCount < 4) {
        var randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500;
        console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " ms");
        browser.sleep(randomNumber);
    }

    var date = new Date();
    timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' +
        date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms';

    fs.writeFileSync(filepath + timeStamp, 'utf8');

    instanceCount = fs.readdirSync(filepath).length;

timeStamp变量似乎忽略了browser.sleep()函数。我尝试使用一个返回一个promise的函数但是无法使它工作。以下是我提出的建议:

    var getTimestamp = function() {
        return new Promise(function (resolve, reject) {

            if (instanceCount < 4) {
                var randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500;
                console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " seconds");
                browser.sleep(randomNumber);
            }

        });
    };

        getTimestamp().then(function () {
            var date = new Date();
            timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' +
                date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms';

                fs.writeFileSync(filepath + timeStamp, 'utf8');
        },

有人可以告诉我,如果我在正确的轨道上和/或在流量控制/执行方面是否有意义?

2 个答案:

答案 0 :(得分:0)

如果您要使用新承诺,您的方法需要解决承诺。此外,如果您要使用browser.sleep,则需要返回该承诺。在下面的示例中,我将其链接以返回布尔值。这将有助于我们决定是否编写文件来编写文件。

/**
 * gets the timestamp should resolve and return a promise
 * @returns Promise<boolean> if true, it is instanceCount < 4. false
 *          if instanceCount >= 4
 */
let getTimestamp = function() {
  if (instanceCount < 4) {
    let randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500;
    console.log("instanceCount == " + instanceCount + "... sleeping " + randomNumber + " seconds");
    return browser.sleep(randomNumber).then(() => { return true });
  } else {
    return Promise.resolve(false);
  }
};

getTimestamp().then((result)=> {
  if (result) {
    let date = new Date();
    timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' +
    date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms';
    fs.writeFileSync(filepath + timeStamp, 'utf8');
  } 
}

答案 1 :(得分:0)

我找到了一个有很多cnishina帮助的解决方案,它涉及使用browser.wait()的.then方法并将它一直向下扩展(大约50行)到我需要执行同步的地方。很酷的是,.then函数结束后的所有内容都是异步执行的,这意味着实际上根本没有浪费时间!这是代码:

        browser.sleep(randomNumber).then(function () {

            var date = new Date();
            timeStamp = date.getMonth() + 1 + '-' + date.getDate() + '-' + date.getFullYear() + '-' +
                date.getHours() + 'h' + date.getMinutes() + 'm' + date.getSeconds() + 's' + date.getMilliseconds() + 'ms';

            fs.writeFileSync(filepath + timeStamp, 'utf8');

            //.then function continues...