Skip to content

Commit 5b71d13

Browse files
committed
#1604 - slight refactoring and added some tests
1 parent 01be031 commit 5b71d13

File tree

6 files changed

+60
-11
lines changed

6 files changed

+60
-11
lines changed

examples/tests/google.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module.exports = {
1616

1717
client.expect.element('#lst-ib').to.be.enabled;
1818

19-
client.expect.element('#hplogo').text.to.match(/Norge/).before(1000);
19+
//client.expect.element('#hplogo').text.to.match(/Norge/).before(1000);
2020

2121
client.setValue('#lst-ib', 'Norway').pause(500);
2222
client.expect.element('#lst-ib').to.have.value.equal('Norway');

lib/api/protocol.js

+18-10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ var Element = require('../page-object/element.js');
44

55
module.exports = function(Nightwatch) {
66

7+
var WEBDRIVER_ELEMENT_ID = 'element-6066-11e4-a52e-4f735466cecf';
8+
79
var MOUSE_BUTTON_LEFT = 'left',
810
MOUSE_BUTTON_MIDDLE = 'middle',
911
MOUSE_BUTTON_RIGHT = 'right',
@@ -1385,30 +1387,36 @@ module.exports = function(Nightwatch) {
13851387
return sendRequest(options, callback);
13861388
}
13871389

1390+
function validateElementEntry(result) {
1391+
if (!result.ELEMENT && result[WEBDRIVER_ELEMENT_ID]) {
1392+
result.ELEMENT = result[WEBDRIVER_ELEMENT_ID];
1393+
delete result[WEBDRIVER_ELEMENT_ID];
1394+
}
1395+
1396+
return result;
1397+
}
1398+
13881399
function postRequest(path, data, callback) {
1389-
var validateElementEntry = function (result) {
1390-
var ELEMENT_UID = 'element-6066-11e4-a52e-4f735466cecf';
1391-
if (!result.ELEMENT && result[ELEMENT_UID]) {
1392-
result.ELEMENT = result[ELEMENT_UID];
1393-
delete result[ELEMENT_UID];
1394-
}
1395-
return result;
1396-
};
13971400
if (arguments.length === 2 && typeof data === 'function') {
13981401
callback = data;
13991402
data = '';
14001403
}
1404+
14011405
var options = {
14021406
path : '/session/' + Nightwatch.sessionId + path,
14031407
method : 'POST',
14041408
data : data || ''
14051409
};
1410+
14061411
return sendRequest(options, function(result) {
14071412
if (/\/element$/.test(options.path) && result.value) {
14081413
result.value = validateElementEntry(result.value);
1409-
} else if (/\/elements$/.test(options.path) && result.value[0]) {
1410-
result.value[0] = validateElementEntry(result.value[0]);
1414+
} else if (/\/elements$/.test(options.path) && Array.isArray(result.value)) {
1415+
result.value = result.value.map(function(entry) {
1416+
return validateElementEntry(entry);
1417+
});
14111418
}
1419+
14121420
if (typeof callback === 'function') {
14131421
callback.call(this, result);
14141422
}

lib/http/request.js

+4
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ module.exports = (function() {
127127
delete result.value.stackTrace;
128128
}
129129

130+
if (result.value.stacktrace) {
131+
delete result.value.stacktrace;
132+
}
133+
130134
if (needsFormattedErrorMessage(result)) {
131135
errorMessage = formatErrorMessage(result.value);
132136
delete result.value.localizedMessage;

test/lib/mocks.json

+5
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@
6161
"postdata" : "{\"using\":\"css selector\",\"value\":\"#weblogin\"}",
6262
"response" : "{\"sessionId\":\"1352110219202\",\"status\":0,\"value\":[{\"ELEMENT\":\"0\"}],\"class\":\"org.openqa.selenium.remote.Response\",\"hCode\":604376696}"
6363
},
64+
{
65+
"url" : "/wd/hub/session/1352110219202/elements",
66+
"postdata" : "{\"using\":\"css selector\",\"value\":\"#webdriver\"}",
67+
"response" : "{\"sessionId\":\"1352110219202\",\"status\":0,\"value\":[{\"element-6066-11e4-a52e-4f735466cecf\":\"5cc459b8-36a8-3042-8b4a-258883ea642b\"}]}"
68+
},
6469
{
6570
"url" : "/wd/hub/session/1352110219202/elements",
6671
"postdata" : "{\"using\":\"css selector\",\"value\":\"#weblogin-multiple\"}",

test/src/api/commands/testWaitForElementPresent.js

+13
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ module.exports = {
2525
Nightwatch.start();
2626
},
2727

28+
'client.waitForElementPresent() with webdriver response success': function (done) {
29+
var api = Nightwatch.api();
30+
31+
api.waitForElementPresent('#webdriver', 100, function callback(result, instance) {
32+
assert.equal(instance.expectedValue, 'found');
33+
assert.equal(result.status, 0);
34+
assert.equal(result.value[0].ELEMENT, '5cc459b8-36a8-3042-8b4a-258883ea642b');
35+
done();
36+
});
37+
38+
Nightwatch.start();
39+
},
40+
2841
'client.waitForElementPresent() failure with custom message': function (done) {
2942
var api = Nightwatch.api();
3043
api.globals.waitForConditionPollInterval = 10;

test/src/api/element-selectors/testProtocolElementSelectors.js

+19
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,25 @@ module.exports = MochaTest.add('test protocol element selectors', {
9494
Nightwatch.start();
9595
},
9696

97+
'protocol.element(using, {selector, locateStrategy}) webdriver response' : function(done) {
98+
nocks.elementFound('#nock-webdriver', 'css selector', {
99+
'element-6066-11e4-a52e-4f735466cecf': '5cc459b8-36a8-3042-8b4a-258883ea642b'
100+
});
101+
102+
Nightwatch.api()
103+
.element('css selector', {selector: '#nock-webdriver', locateStrategy: 'css selector'}, function callback(result) {
104+
assert.equal(result.value.ELEMENT, '5cc459b8-36a8-3042-8b4a-258883ea642b', 'Found element, same locateStrategy');
105+
})
106+
.element('css selector', {selector: '#nock-webdriver', locateStrategy: null}, function callback(result) {
107+
assert.equal(result.value.ELEMENT, '5cc459b8-36a8-3042-8b4a-258883ea642b', 'Found element, null locateStrategy');
108+
})
109+
.perform(function() {
110+
done();
111+
});
112+
113+
Nightwatch.start();
114+
},
115+
97116
'protocol.element(using, {locateStrategy})' : function(done) {
98117
utils.catchQueueError(function (err) {
99118
var msg = 'No selector property for';

0 commit comments

Comments
 (0)