量角器超时为元素

时间:2016-06-30 02:06:13

标签: javascript angularjs cucumber protractor chai

将黄瓜与量角器结合使用,我遇到了一个不寻常的情况,即getText的值永远不会被所讨论的元素的文本解决,导致我的步骤保持超时。

Then the header should contain the content:
"""
Lorem Ipsum
"""

使用chai-(as-promised)作为我的断言库,我的步骤定义如下:

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

我对这里发生的事情有点不确定。当尝试用chai解决这个承诺时,似乎只会出现这个问题。我错过了什么?

这是我的世界,如果有帮助的话。这是非常基本的:

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
cucumberjs = 1.2.0
量角器 - 黄瓜 - 框架= 0.6.0
chai = 3.5.0
chai-as-promised = 5.3.0

3 个答案:

答案 0 :(得分:0)

我不确定我是否可以帮助您解决为什么这个问题(看起来确实像你正在做的那样),但基于正在工作我认为你可以将你的断言放在一个解析处理程序中以通过测试。

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

答案 1 :(得分:0)

.Then语句中未定义预期内容。 尝试添加"([^"]*)"

this.Then(/^the header should contain the content: "([^"]*)"$/, function(content, callback) {

答案 2 :(得分:0)

有趣。看起来很好。您是否尝试记录传入的内容和从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();
  });
});

我唯一的另一个建议就是在步骤文件中输入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);
});