Javascript 量角器在提取元素的文本时超时

Javascript 量角器在提取元素的文本时超时,javascript,angularjs,cucumber,protractor,chai,Javascript,Angularjs,Cucumber,Protractor,Chai,将cucumber与量角器结合使用时,我遇到了一个不寻常的情况,getText的值从未与相关元素的文本解析,导致我的步骤一直超时 Then the header should contain the content: """ Lorem Ipsum """ 使用chai-(如承诺的那样)作为我的断言库,我的步骤定义如下: this.Then(/^the header should contain the content:$/, function(content, callback) {

将cucumber与量角器结合使用时,我遇到了一个不寻常的情况,
getText
的值从未与相关元素的文本解析,导致我的步骤一直超时

Then the header should contain the content:
"""
Lorem Ipsum
"""
使用chai-(如承诺的那样)作为我的断言库,我的步骤定义如下:

this.Then(/^the header should contain the content:$/, function(content, callback) {
    var text = element(by.css('.description'));
    this.expect(text.getText())
      .to.eventually.equal(content)
      .and.notify(callback);
  });
但是,在运行测试时,这会导致以下错误:

function timed out after 10000 milliseconds
更奇怪的是,如果我显式断言
getText()
返回的承诺是否已解决,那么我的测试通过了:

this.expect(text.getText()).to.eventually.be.fulfilled
// true
…如果我只是将自己的解析处理程序附加到
getText()
,我就可以很好地查看内容,因此选择元素和提取内部文本似乎没有问题

text.getText().then(function(content) {
  console.log(content)
  // Lorem Ipsum
})
我有点不确定这里发生了什么。问题似乎只有在试图解决与柴的承诺时才会出现。我错过了什么

这是我的世界,以防万一。这是非常基本的:

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);


function World() {
  this.expect = chai.expect;
  this.assert = chai.assert;
}

module.exports = function() {
  this.World = World;
};
更新

以下是我目前使用的软件包版本:

量角器=3.3.0
黄瓜j=1.2.0
量角器框架=0.6.0
柴=3.5.0

chai as promised=5.3.0

我不确定我能不能帮你回答这个问题的原因(看起来你正在做的事情应该是可行的),但基于你正在做的事情,我认为你可以将你的断言放在一个解析处理程序中,让测试通过

text.getText().then(function(content) {
  this.expect(content)
    .to.equal(expectedContent)
    .and.notify(callback);
});

语句中未定义所需的内容。
尝试添加
“([^”]*)”


很有意思。看起来不错。你试过记录传入的内容和从get text返回的文本吗

this.Then(/^the header should contain the content:$/, function(content, callback) {
  var elem = element(by.css('.description'));
  elem.getText().then(function(elemText) {
    console.log("Element text: " + elemText);
    console.log("Content text: " + content);
    callback();
  });
});
我唯一的其他建议是在steps文件中加入Chai:

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
然后尝试不使用以下选项:

this.Then(/^the header should contain the content:$/, function(content, callback) {
  expect(element(by.css('.description')).getText()).to.eventually.equal(content).and.notify(callback);
});

它是只发生在这个特定的元素上,还是发生在任何“最终”断言上?请同时发布您目前拥有的包的版本。@alecxe它似乎只发生在对元素使用
getText()
时。我有另一个“最终”断言,用于存在一个工作正常的元素:
expect(element(by.id('foo')).isPresent()).to.finally.be.true
我已经更新了我的问题,使用了功能步骤。请注意,它的编写方式是,内容应该从步骤后的“herdoc”中提取出来。(我实际上不知道小黄瓜是否将其称为“herdocs”…但基本上是“”分隔符之间的内容)
this.Then(/^the header should contain the content:$/, function(content, callback) {
  expect(element(by.css('.description')).getText()).to.eventually.equal(content).and.notify(callback);
});