我是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();
});
};
答案 0 :(得分:0)
此代码看起来不正确。您的模块正在导出调用new dbQueryContract();
的结果。但是,该函数并不是构造函数。您未在this
上设置任何属性或向原型添加任何属性。此外,您还没有返回任何内容,这可能是您以后未定义的原因。
接下来的问题是,您正在联系then
来电,假设驱动程序使用了promises - 它没有(至少还没有)。您需要让您的函数返回延迟,您需要在适当的时候自行解决。这里有一些关于添加更强大的JavaScript层的讨论:
https://github.com/oracle/node-oracledb/pull/321
如果我们走这条路线,我希望看到所有异步方法默认返回一个承诺,这会让事情变得更容易......