为量角器测试提供数据

时间:2016-02-01 17:18:08

标签: node.js protractor

我是nodejs的新手,现在正在使用黄瓜和量角器自动化功能测试做BDD。 对于我的一些步骤,我需要将查询发送到oracle数据库,然后使用结果在测试的网站中进行搜索。

1-我尝试使用oracleDB时,会返回我放入变量的预期结果,但这个结果在我的步骤中不可用。方法sendKeys of webdriver put" undefined"在输入中。 2-我也想知道是否有其他办法,因为很难安装oracledb而下一个任务是建立jenkins

这是我的代码:

 var dbQueryContract = function() {
  var oracledb  = require('oracledb');
//Database communication
oracledb.getConnection(
          {
            user          : "xxx",
            password      : "xxx",
            connectString : "xxx"
          },
          function(err, connection)
          {
            if (err) {
              console.error(err.message);
              return;
            }
            connection.execute(
              "select xxx, xxx " +
                "FROM xxxxx " +
                "where xxx is not null and rownum < 5",
                {
             resultSet: true
         },
                // bind value for :id [110],
                function(err, result)
     {
       if (err) { console.error(err.message); return; }
       console.log(result.rows[0][0]);
     });

criteria= result.rows[0][0];
// the connection is ok and i can log result.rows[0][0] i want to use for search


});
};
module.exports = new dbQueryContract();

************************************************************************************************


// Use the external Chai As Promised to deal with resolving promises in
// expectations.
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

var expect = chai.expect;
  var page1 = require('../page1.js');
  var page2 = require('../page2.js');
  var dbQueryContract = require('../dbQueryContract.js');
  var EC = protractor.ExpectedConditions;


// Chai expect().to.exist syntax makes default jshint unhappy.
// jshint expr:true

module.exports = function() {
  this.Given(/^thanx for help$/, function(next) {
    browser.ignoreSynchronization=true;
    browser.get('toto.com');
       page1.login.sendKeys('login')
        page1.password.sendKeys('P@ssword')
        page1.validateButton.click();
        browser.ignoreSynchronization=false;
        page2.searchLink.click();
        browser.waitForAngular();
        browser.sleep(5000);
      //  console.log(dbQueryContract.numabo.result.rows[0][0]);

      dbQueryContract().then(function(criteria) {
      page2.searchInput.sendKeys(criteria, protractor.Key.ENTER);
    });


    next();
      });

this.When(/^i learn more$/, function(next) {
browser.sleep(5000);

       next();
  });


};

1 个答案:

答案 0 :(得分:0)

此代码看起来不正确。您的模块正在导出调用new dbQueryContract();的结果。但是,该函数并不是构造函数。您未在this上设置任何属性或向原型添加任何属性。此外,您还没有返回任何内容,这可能是您以后未定义的原因。

接下来的问题是,您正在联系then来电,假设驱动程序使用了promises - 它没有(至少还没有)。您需要让您的函数返回延迟,您需要在适当的时候自行解决。这里有一些关于添加更强大的JavaScript层的讨论: https://github.com/oracle/node-oracledb/pull/321

如果我们走这条路线,我希望看到所有异步方法默认返回一个承诺,这会让事情变得更容易......