页面加载前传递的 mocha 断言

mocha assertions passed before page loads

下面的 mocha 和 webdriverio 脚本在页面加载之前传递断言。

我不明白当元素本身可能还不存在时,它是如何传递所有内容的。页面加载后,我可以看到该元素未被单击。那是假通行证吗?我该如何在代码中解决这个问题?

var webdriverio = require('webdriverio');
var should = require('chai').should()
var expect = require('chai').expect()
var options = {
    desiredCapabilities: {
        browserName: 'chrome'
    }
};

before(function() {

    browser=webdriverio.remote(options)
    return browser.init()

  });


describe('sauce labs page test', function() {
    it('should assert page title', function(done) {




           browser.url('https://docs.saucelabs.com/reference/platforms-configurator/?_ga=1.5883444.608313.1428365147#/');
           browser.getTitle().then(function(title){
          title.should.equal('Platform Configurator');
           });
            done();
    });



    it('should assert sub heading', function(done) {

    browser.getText('h3').then(function(text) {
    text.should.equal('API');
    console.log(text);
   });
   done();
});


   it('should click on selenium', function(done) {

    browser.click('#main-content > div > ng-view > div > div:nth-child(1) > div.choice-buttons.choice-api > div:nth-child(2)')


   done();
});


 });

您应该在 .then() 处理程序中调用 done 回调,否则它会在浏览器有机会加载页面之前被调用:

it('should assert page title', function(done) {
  browser.url('https://docs.saucelabs.com/reference/platforms-configurator/?_ga=1.5883444.608313.1428365147#/');
  browser.getTitle().then(function(title) {
    title.should.equal('Platform Configurator');
    done();
  });
});

然而,这引入了另一个问题:如果断言失败,done 将永远不会被调用(因为异常在它之前抛出)。

相反,您可以使用 Mocha 具有内置承诺支持这一事实。而不是使用 done 回调,return 一个承诺,Mocha 将正确处理它(以及任何异常):

it('should assert page title', function() {
  browser.url('https://docs.saucelabs.com/reference/platforms-configurator/?_ga=1.5883444.608313.1428365147#/');
  return browser.getTitle().then(function(title) {
    title.should.equal('Platform Configurator');
  });
});