node-red
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Copyright JS Foundation and other contributors, http://js.foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
**/
|
||||
|
||||
function open(retainMessage) {
|
||||
browser.clickWithWait('#red-ui-tab-debug-link-button');
|
||||
|
||||
if (!retainMessage) {
|
||||
// Clear old messages
|
||||
browser.clickWithWait('//a[@id="red-ui-sidebar-debug-clear"]');
|
||||
}
|
||||
}
|
||||
|
||||
function getMessage(index) {
|
||||
index = index ? index : 1;
|
||||
var debugMessagePath = '//div[@class="red-ui-debug-content red-ui-debug-content-list"]/div[contains(@class,"red-ui-debug-msg")][' + index + ']//span[contains(@class, "red-ui-debug-msg-type")]';
|
||||
return browser.getTextWithWait(debugMessagePath);
|
||||
}
|
||||
|
||||
function clearMessage() {
|
||||
browser.clickWithWait('//a[@id="red-ui-sidebar-debug-clear"]');
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
open: open,
|
||||
getMessage: getMessage,
|
||||
clearMessage: clearMessage,
|
||||
};
|
||||
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* Copyright JS Foundation and other contributors, http://js.foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
**/
|
||||
|
||||
var idMap = {
|
||||
// common
|
||||
"inject": ".red-ui-palette-node[data-palette-type='inject']",
|
||||
"debug": ".red-ui-palette-node[data-palette-type='debug']",
|
||||
"complete": ".red-ui-palette-node[data-palette-type='complete']",
|
||||
"catch": ".red-ui-palette-node[data-palette-type='catch']",
|
||||
"status": ".red-ui-palette-node[data-palette-type='status']",
|
||||
"comment": ".red-ui-palette-node[data-palette-type='comment']",
|
||||
// function
|
||||
"function": ".red-ui-palette-node[data-palette-type='function']",
|
||||
"switch": ".red-ui-palette-node[data-palette-type='switch']",
|
||||
"change": ".red-ui-palette-node[data-palette-type='change']",
|
||||
"range": ".red-ui-palette-node[data-palette-type='range']",
|
||||
"template": ".red-ui-palette-node[data-palette-type='template']",
|
||||
"delay": ".red-ui-palette-node[data-palette-type='delay']",
|
||||
"trigger": ".red-ui-palette-node[data-palette-type='trigger']",
|
||||
"exec": ".red-ui-palette-node[data-palette-type='exec']",
|
||||
// network
|
||||
"mqttIn": ".red-ui-palette-node[data-palette-type='mqtt in']",
|
||||
"mqttOut": ".red-ui-palette-node[data-palette-type='mqtt out']",
|
||||
"httpIn": ".red-ui-palette-node[data-palette-type='http in']",
|
||||
"httpResponse": ".red-ui-palette-node[data-palette-type='http response']",
|
||||
"httpRequest": ".red-ui-palette-node[data-palette-type='http request']",
|
||||
"websocketIn": ".red-ui-palette-node[data-palette-type='websocket in']",
|
||||
"websocketOut": ".red-ui-palette-node[data-palette-type='websocket out']",
|
||||
// sequence
|
||||
"split": ".red-ui-palette-node[data-palette-type='split']",
|
||||
"join": ".red-ui-palette-node[data-palette-type='join']",
|
||||
"batch": ".red-ui-palette-node[data-palette-type='batch']",
|
||||
// parser
|
||||
"csv": ".red-ui-palette-node[data-palette-type='csv']",
|
||||
"html": ".red-ui-palette-node[data-palette-type='html']",
|
||||
"json": ".red-ui-palette-node[data-palette-type='json']",
|
||||
"xml": ".red-ui-palette-node[data-palette-type='xml']",
|
||||
"yaml": ".red-ui-palette-node[data-palette-type='yaml']",
|
||||
// storage
|
||||
"fileIn": ".red-ui-palette-node[data-palette-type='file in']",
|
||||
};
|
||||
|
||||
function getId(type) {
|
||||
return idMap[type];
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getId: getId,
|
||||
};
|
||||
@@ -0,0 +1,101 @@
|
||||
/**
|
||||
* Copyright JS Foundation and other contributors, http://js.foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
**/
|
||||
|
||||
var when = require("when");
|
||||
var events = require("nr-test-utils").require("@node-red/runtime/lib/events.js");
|
||||
var palette = require("./palette_page");
|
||||
var nodeFactory = require("../nodes/nodefactory_page");
|
||||
var keyPage = require("../util/key_page");
|
||||
var flowLayout = {
|
||||
flowRightEnd : 600,
|
||||
widthInterval : 300,
|
||||
heightInterval : 80
|
||||
};
|
||||
var previousX = -flowLayout.widthInterval;
|
||||
var previousY = 0;
|
||||
|
||||
function addNode(type, x, y) {
|
||||
if (x !== undefined) {
|
||||
previousX = x;
|
||||
if (y !== undefined) {
|
||||
previousY = y;
|
||||
}
|
||||
} else {
|
||||
if (previousX < flowLayout.flowRightEnd) {
|
||||
previousX = previousX + flowLayout.widthInterval;
|
||||
} else {
|
||||
previousX = 0;
|
||||
previousY = previousY + flowLayout.heightInterval;
|
||||
}
|
||||
}
|
||||
browser.waitForVisible('#red-ui-palette-search');
|
||||
browser.setValue('//*[@id="red-ui-palette-search"]/div/form/input', type.replace(/([A-Z])/g, ' $1').toLowerCase());
|
||||
browser.pause(300);
|
||||
browser.waitForVisible(palette.getId(type));
|
||||
browser.moveToObject(palette.getId(type));
|
||||
browser.buttonDown();
|
||||
browser.moveToObject("#red-ui-palette-search", previousX + 300, previousY + 100); // adjust to the top-left corner of workspace.
|
||||
browser.buttonUp();
|
||||
// Last node is the one that has been created right now.
|
||||
var nodeElement = browser.elements('//*[contains(concat(" ", normalize-space(@class), " "), " red-ui-flow-node-group ")][last()]');
|
||||
var nodeId = nodeElement.getAttribute('id');
|
||||
var node = nodeFactory.create(type, nodeId);
|
||||
return node;
|
||||
}
|
||||
|
||||
function deleteAllNodes() {
|
||||
browser.waitForVisible('//*[contains(@class, "active")]/a[@class="red-ui-tab-label"]');
|
||||
browser.click('//*[contains(@class, "active")]/a[@class="red-ui-tab-label"]');
|
||||
browser.pause(1000);
|
||||
browser.keys(keyPage.selectAll());
|
||||
browser.keys(['Delete']);
|
||||
}
|
||||
|
||||
function deploy() {
|
||||
browser.call(function () {
|
||||
return when.promise(function (resolve, reject) {
|
||||
events.on("runtime-event", function (event) {
|
||||
if (event.id === 'runtime-deploy') {
|
||||
events.removeListener("runtime-event", arguments.callee);
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
browser.clickWithWait('#red-ui-header-button-deploy');
|
||||
});
|
||||
});
|
||||
browser.waitForText('#red-ui-header-button-deploy', 10000);
|
||||
// Need additional wait until buttons becomes clickable.
|
||||
browser.pause(50);
|
||||
}
|
||||
|
||||
function init(width, height) {
|
||||
deleteAllNodes();
|
||||
|
||||
if (width !== undefined) {
|
||||
flowLayout.widthInterval = width;
|
||||
}
|
||||
if (height !== undefined) {
|
||||
flowLayout.heightInterval = height;
|
||||
}
|
||||
previousX = -flowLayout.widthInterval;
|
||||
previousY = 0;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
addNode: addNode,
|
||||
deploy: deploy,
|
||||
init: init
|
||||
};
|
||||
Reference in New Issue
Block a user