如何创建webdriver.io自定义函数?

时间:2015-10-12 05:54:20

标签: selenium selenium-webdriver webdriver-io

我在webdriver.io使用mocha.js并且我需要多次创建一些操作,我不想复制我的代码,因此我想创建自定义函数并调用每个mocha测试中的函数(it)......

举个例子:

    describe('Register', function () {
      it('Login', function (done) {
         client
          .url('http://exmaple.site.com)
          .setValue('input[name="username"]', login.username)
          .setValue('input[name="password"]', login.password)
          .call(done);
      }

      it('Login and logout', function (done) {
         client
          .url('http://exmaple.site.com)
          .setValue('input[name="username"]', login.username)
          .setValue('input[name="password"]', login.password)
          .click('#logout')
          .call(done);
      }
    }

所以就像你在这里看到我复制我的登录代码......

有任何方法可以创建像login这样的函数并在测试中调用它(它):

function login(){
   client
   .setValue('input[name="username"]', login.username)
   .setValue('input[name="password"]', login.password)
}

感谢。

2 个答案:

答案 0 :(得分:2)

我不确定您对登录/注销的意图,但这是一个通用的自定义命令,webdriver.io custom command

client.addCommand('goGetTitle', function() {

    return client
        .url('https://www.yahoo.com/')
        .getTitle()

});

describe('Test', function() {
    it('should have gotten the title', function(done) {

        client.goGetTitle().then(function(title) {
                console.log('title', title);
            })
            .call(done);
    });
});

答案 1 :(得分:1)

试试这个

function login(){
  return client
  .setValue('input[name="username"]', login.username)
  .setValue('input[name="password"]', login.password)
}

describe('Register', function () {
  it('Login', function (done) {
     client
      .url('http://exmaple.site.com)
      .then( login )
      .call(done);
  }

  it('Login and logout', function (done) {
     client
      .url('http://exmaple.site.com)
      .then(login)
      .click('#logout')
      .call(done);
  }
}

基本上,您将通过.then(login)替换重复登录。因为登录返回客户端承诺,一切都工作为例外。