Javascript 量角器在提取元素的文本时超时
将cucumber与量角器结合使用时,我遇到了一个不寻常的情况,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) {
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);
});