Javascript 量角器:跟踪当前规格

Javascript 量角器:跟踪当前规格,javascript,protractor,Javascript,Protractor,我正在使用量角器并尝试创建基于时间戳的文件名文件。问题是,即使我使用browser.sleep()在创建时间戳(用于创建文件名)之前随机等待一段时间,文件名之间的距离仍然在50毫秒以内: if (instanceCount < 4) { var randomNumber = Math.floor(Math.random() * (10000 - 500 + 1)) + 500; console.log("instanceCount == " + in

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

    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;
if(instanceCount<4){
var randomNumber=Math.floor(Math.random()*(10000-500+1))+500;
log(“instanceCount==”+instanceCount+“…休眠”+randomNumber+“ms”);
浏览器。睡眠(随机数);
}
变量日期=新日期();
timeStamp=date.getMonth()+1+'-'+date.getDate()+'-'+date.getFullYear()+'-'+
date.getHours()+'h'+date.getMinutes()+'m'+date.getSeconds()+'s'+date.getmillizes()+'ms';
writeFileSync(文件路径+时间戳'utf8');
instanceCount=fs.readdirSync(filepath).length;
timeStamp变量似乎忽略了browser.sleep()函数。我尝试使用一个返回承诺的函数,但也无法让它工作。以下是我的想法:

    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');
        },
var getTimestamp=function(){
返回新承诺(功能(解决、拒绝){
如果(实例计数<4){
var randomNumber=Math.floor(Math.random()*(10000-500+1))+500;
log(“instanceCount==”+instanceCount+“…休眠”+randomNumber+“秒”);
浏览器。睡眠(随机数);
}
});
};
getTimestamp().then(函数(){
变量日期=新日期();
timeStamp=date.getMonth()+1+'-'+date.getDate()+'-'+date.getFullYear()+'-'+
date.getHours()+'h'+date.getMinutes()+'m'+date.getSeconds()+'s'+date.getmillizes()+'ms';
writeFileSync(文件路径+时间戳'utf8');
},

有人能告诉我我是否在正确的轨道上和/或这在流控制/执行方面是否有意义吗?

如果要使用新的承诺,您的方法需要解析承诺。另外,如果要使用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');
  } 
}
/**
*获取应解析并返回承诺的时间戳
*@返回承诺如果为true,则为instanceCount<4。false
*如果实例计数>=4
*/
让getTimestamp=function(){
如果(实例计数<4){
让randomNumber=Math.floor(Math.random()*(10000-500+1))+500;
log(“instanceCount==”+instanceCount+“…休眠”+randomNumber+“秒”);
返回browser.sleep(randomNumber)。然后(()=>{return true});
}否则{
返回承诺。解决(错误);
}
};
getTimestamp()。然后((结果)=>{
如果(结果){
让日期=新日期();
timeStamp=date.getMonth()+1+'-'+date.getDate()+'-'+date.getFullYear()+'-'+
date.getHours()+'h'+date.getMinutes()+'m'+date.getSeconds()+'s'+date.getmillizes()+'ms';
writeFileSync(文件路径+时间戳'utf8');
} 
}

在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...

与尝试写入带有任意时间戳的文件不同,还有其他方法可以写入其他更有意义的文件。您可以使用jasmine reporters并使用consolidation to false。这将按规范写入文件。请参阅此。您还可以使用阻止代理功能分离日志。有关更多信息,请参阅ut blocking proxy,查看中的自述文件。我尝试使用jasmine reporters,但唯一可以使用的方法是addReporter方法,我已经有一个reporter登录到我的控制台。我意识到从时间戳命名文件似乎不是最佳做法,但我需要从代码中读取多少文件s在给定时间点位于文件夹中。文件本身并不重要,将文件名作为时间戳有助于显示执行过程中发生的情况。我已使用instanceCount变量更新了我的问题,以显示我的意思。您是否为此尝试了cookbook?它应该根据规格将其分离出来。如果您的所有测试都在一个f中ile,这将只生成一个文件。此代码确实创建多个文件,但由于instanceCount变量不等待浏览器。wait()函数,有时同时读取两个不同的规格/文件,并且instanceCount对于两个不同的规格具有相同的值,这是一个问题。我不确定上面的注释是否适用于您的代码。这听起来不是一个好策略,因此我建议尝试其中一个建议。因为上面的代码中没有使用browser.wa所以我不确定这是指什么。