如何按照承诺使用 Webdriver.io 和 Chai 来验证 css 属性

How to use Webdriver.io with Chai as Promised to verify css property

目前正在将 Webdriver.io 与 Mocha、Chai 和 Chai-as-Promised 一起使用,但是在尝试验证 CSS 属性 时,我正在努力获得验证承诺:

代码:

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

chai.use(chaiAsPromised);
chai.should();
chaiAsPromised.transferPromiseness = browser.transferPromiseness;

describe('Buttons', function() {

    var buttonSelector = '.button';

    browser.url('http://localhost/buttons.html');

    it('should have square corners by default', function (done) {
        browser
            .getCssProperty(buttonSelector, 'border-top-left-radius').should.eventually.become('0px')
            .call(done);
    });
});

但是我收到这个错误:

Default Buttons: Tiny Size 1) should have square corners by default 1 failing

1) Default Buttons: Tiny Size should have square corners by default: Uncaught AssertionError: expected { Object (property, value, ...) } to deeply equal '0px' 0 passing (2s) at assertEqual (/node_modules/chai/lib/chai/core/assertions.js:393:19)

  at ctx.(anonymous function) (/node_modules/chai/lib/chai/utils/addMethod.js:40:25)
  at WebdriverIO.<anonymous> (/node_modules/chai-as-promised/lib/chai-as-promised.js:302:26)

  at /node_modules/webdriverio/lib/utils/PromiseHandler.js:85:52
  at process._tickCallback (node.js:419:13)

根据documentation,这不是return一个承诺吗?

看来您应该使用回调。

编辑:好的,我可能误解了文档,相反,promise 中输出的值可能不是您所期望的。如果你查看文档,你可以看到回调产生了什么。所以我们可以期望它与应许相同。然后,你可以使用这样的东西:

browser.getCssProperty(buttonSelector, 'border-top-left-radius').should.eventually.have.property('value', '0px').call(done);

getCSSProperty returns 一个对象

{
    property: 'width',
    value: '100px',
    parsed: {
        type: 'number',
        string: '100px',
        unit: 'px',
        value: 100
    }
}

您的错误消息说 0px 不等于那个对象,这实际上是真的。在这种情况下,最好使用回调。使用 "Chai Things" 插件可能是可能的。