我有一个量角器 - 茉莉花测试,我试图检查页面上的所有字段是否为空白。我用for循环写了一个简单的测试。现在,我的问题是,我正在努力遵守量角器/茉莉花最佳实践,即每个预期条件只有一个测试。如何将此代码更改为仅一个预期条件?
这是我写的测试:
it("should check that all input fields are blank", function() {
allInputs.then(function(elements) {
elements.forEach(function(element){
expect(element.getText()).toEqual("");
});
});
});
答案 0 :(得分:2)
简而言之:您可以这样做 - expect(allInputs.getText()).toEqual("")
。
更多详细信息:element.all().getText()
返回一个包含所有子元素的文本值的数组,因为您希望这些值为空,只需检查总字符串是否为空。
回答你的一般性问题
“当我们需要多次验证时,我们如何处理场景 执行“
预期条件提供条件选项 - 如OR,AND等。请参阅official documentation here
var EC = protractor.ExpectedConditions;
var titleContainsFoo = EC.titleContains('Foo');
var titleIsNotFooBar = EC.not(EC.titleIs('FooBar'));
// Waits for title to contain 'Foo', but is not 'FooBar'
browser.wait(EC.and(titleContainsFoo, titleIsNotFooBar), 5000);
如果您想将多个预期分组
Promise.all[
expect(allInputs.getText()).toEqual(""),
expect(allOutputs.getText()).toEqual("")
].then(function(){
done();
})
更新1:上面的Promise.all
语法不正确。它应该是Promise.all([Array of Promises])
我丢失了卷曲的牙箍。
这是正确的做法
describe('Describe something', function() {
it('check check', function(done) {
browser.get('http://www.protractortest.org/#/')
Promise.all([
expect(browser.getCurrentUrl()).toContain('protractortest'),
expect(browser.getCurrentUrl()).toContain('org')]).then(function() {
done();
}).catch(function() {
done.fail('somehow the Url is incorrect');
})
browser.sleep(10000)
});
});
这使我们可以灵活地将测试用例中的所有验证分组到单个Promise中(提供Array中expect所返回的所有promise)。这将帮助我们对所有断言进行分组并对测试用例进行通过/失败,并为所有验证集抛出自定义错误消息
更新2:正如我上面提到的那样。 element.all().getText()
返回一个数组并进行比较,我错误地将一个Array对象与String对象进行了比较。我们需要做一个array.join()
并比较
allInputs.getText().then(function(values){
expect(values.join('')).toEqual('')
})