如何在量角器中结合多种预期条件?

时间:2017-03-08 13:02:05

标签: javascript jasmine protractor

我有一个量角器 - 茉莉花测试,我试图检查页面上的所有字段是否为空白。我用for循环写了一个简单的测试。现在,我的问题是,我正在努力遵守量角器/茉莉花最佳实践,即每个预期条件只有一个测试。如何将此代码更改为仅一个预期条件?

这是我写的测试:

it("should check that all input fields are blank", function() {
    allInputs.then(function(elements) {
        elements.forEach(function(element){
            expect(element.getText()).toEqual("");
        });
    });
});

1 个答案:

答案 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('')
})