Skip to content

Commit 901c63f

Browse files
harshit-bsAutomatedTester
authored andcommitted
Added a fix for assert.hasAttribute (#3651)
1 parent fcbf572 commit 901c63f

File tree

2 files changed

+36
-47
lines changed

2 files changed

+36
-47
lines changed

lib/api/assertions/hasAttribute.js

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
* @api assertions
2020
*/
2121

22-
const {setElementSelectorProps, containsMultiple} = require('../../utils');
22+
const {setElementSelectorProps, isString} = require('../../utils');
2323

2424
exports.assertion = function(definition, expectedAttribute, msg) {
2525
this.options = {
@@ -32,35 +32,31 @@ exports.assertion = function(definition, expectedAttribute, msg) {
3232

3333

3434
this.formatMessage = function() {
35+
if (!isString(expectedAttribute)) {
36+
throw new Error('Expected attribute must be a string');
37+
}
38+
3539
let message = msg || `Testing if element %s ${this.negate ? 'doesn\'t have attribute %s' : 'has attribute %s'}`;
3640

3741
return {
3842
message,
39-
args: [this.elementSelector, `'${Array.isArray(expectedAttribute) ? expectedAttribute.join(' ') : expectedAttribute}'`]
43+
args: [this.elementSelector, `'${expectedAttribute}'`]
4044
};
4145
};
4246

4347
this.evaluate = function() {
44-
if (!this.attributeList) {
45-
return false;
46-
}
47-
48-
return containsMultiple(this.attributeList, expectedAttribute, ' ');
49-
};
48+
const {result} = this;
5049

51-
this.value = function(result) {
5250
if (!result || !result.value) {
53-
return '';
51+
return false;
5452
}
55-
56-
this.attributeList = result.value.map(attribute => attribute.name);
57-
58-
return this.attributeList;
53+
54+
return true;
5955
};
6056

6157
this.command = function(callback) {
6258
this.api.getAttribute(setElementSelectorProps(definition, {
6359
suppressNotFoundErrors: true
64-
}), 'attributes', callback);
60+
}), expectedAttribute, callback);
6561
};
6662
};

test/src/api/assertions/testHasAttribute.js

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ describe('assert.hasAttribute', function () {
1313
return assertionTest({
1414
args: ['.test_element', 'data-test', 'Test message'],
1515
commandResult: {
16-
value: [{name: 'data-track'}, {name: 'data-test'}]
16+
value: 'data-track'
1717
},
1818
assertMessage: true,
1919
assertion({instance, failure}) {
@@ -28,16 +28,16 @@ describe('assert.hasAttribute', function () {
2828
return assertionTest({
2929
args: ['.test_element', 'data-test'],
3030
commandResult: {
31-
value: [{name: 'data-track'}]
31+
value: 'data-track'
3232
},
3333
negate: true,
3434
assertion({instance, queueOpts, message}) {
3535
assert.strictEqual(typeof err, 'undefined');
3636
assert.strictEqual(queueOpts.negate, true);
3737

3838
assert.strictEqual(instance.hasFailure(), false);
39-
assert.deepStrictEqual(instance.getValue(), ['data-track']);
40-
assert.deepStrictEqual(instance.getActual(), ['data-track']);
39+
assert.deepStrictEqual(instance.getValue(), 'data-track');
40+
assert.deepStrictEqual(instance.getActual(), 'data-track');
4141
assert.strictEqual(instance.message, 'Testing if element <.test_element> doesn\'t have attribute \'data-test\'');
4242
assert.ok(message.startsWith('Testing if element <.test_element> doesn\'t have attribute \'data-test\''), message);
4343
}
@@ -48,15 +48,15 @@ describe('assert.hasAttribute', function () {
4848
return assertionTest({
4949
args: ['.test_element', 'data-test'],
5050
commandResult: {
51-
value: [{name: 'data-test'}]
51+
value: 'data-test'
5252
},
5353
negate: true,
5454
assertError: true,
5555
assertion({instance, queueOpts, err}) {
5656
assert.strictEqual(queueOpts.negate, true);
5757
assert.strictEqual(instance.hasFailure(), false);
58-
assert.deepStrictEqual(instance.getValue(), ['data-test']);
59-
assert.deepStrictEqual(instance.getActual(), ['data-test']);
58+
assert.deepStrictEqual(instance.getValue(), 'data-test');
59+
assert.deepStrictEqual(instance.getActual(), 'data-test');
6060
assert.strictEqual(err.message, `Testing if element <.test_element> doesn't have attribute 'data-test' in 5ms - expected "has not data-test" but got: "data-test" (${instance.elapsedTime}ms)`);
6161
}
6262
});
@@ -66,13 +66,13 @@ describe('assert.hasAttribute', function () {
6666
return assertionTest({
6767
args: [{selector: '.test_element'}, 'data-test'],
6868
commandResult: {
69-
value: [{name: 'data-test'}]
69+
value: 'data-test'
7070
},
7171
assertResult: true,
7272
assertion({instance, failure, message, err}) {
7373
assert.strictEqual(err, undefined);
7474
assert.deepStrictEqual(instance.options, {elementSelector: true});
75-
assert.deepStrictEqual(instance.getActual(), ['data-test']);
75+
assert.deepStrictEqual(instance.getActual(), 'data-test');
7676
assert.strictEqual(instance.hasFailure(), false);
7777
assert.ok(message.startsWith('Testing if element <.test_element> has attribute \'data-test\''), message);
7878
assert.strictEqual(failure, false);
@@ -84,33 +84,13 @@ describe('assert.hasAttribute', function () {
8484
return assertionTest({
8585
args: ['.test_element', 'data-test', 'Test message'],
8686
commandResult: {
87-
value: [{name: 'not_expected'}]
87+
value: null
8888
},
8989
assertError: true,
9090
assertResult: true,
9191
assertion({instance, failure}) {
92-
assert.deepStrictEqual(instance.getActual(), ['not_expected']);
93-
assert.strictEqual(failure, 'Expected "has data-test" but got: "not_expected"');
94-
}
95-
});
96-
});
97-
98-
it('hasAttribute assertion - element not found', function() {
99-
return assertionTest({
100-
args: ['.test_element', 'data-test', 'Test attribute %s from element "%s" == %s'],
101-
commandResult: {
102-
status: -1,
103-
value: []
104-
},
105-
assertError: true,
106-
assertFailure: true,
107-
assertResult: true,
108-
assertion({instance, failure, err}) {
109-
assert.strictEqual(instance.getActual(), 'element could not be located');
110-
assert.strictEqual(instance.expected(), 'has data-test');
111-
assert.strictEqual(instance.getValue(), null);
112-
assert.strictEqual(failure, 'Expected "has data-test" but got: "element could not be located"');
113-
assert.strictEqual(err.message, `Test attribute <.test_element> from element "'data-test'" == %s in 5ms - expected "has data-test" but got: "element could not be located" (${instance.elapsedTime}ms)`);
92+
assert.deepStrictEqual(instance.getActual(), null);
93+
assert.strictEqual(failure, 'Expected "has data-test" but got: "null"');
11494
}
11595
});
11696
});
@@ -132,4 +112,17 @@ describe('assert.hasAttribute', function () {
132112
}
133113
});
134114
});
115+
116+
it('hasAttribute assertion failed for wrong parameters', function () {
117+
return assertionTest({
118+
args: ['.test_element', ['data-test', 'dummy'], 'Test message'],
119+
commandResult: {
120+
value: 'data-track'
121+
},
122+
assertMessage: true
123+
}).catch((err) => {
124+
assert.ok(err instanceof Error);
125+
assert.strictEqual(err.message, 'Error while running "assert.hasAttribute" command: Expected attribute must be a string');
126+
});
127+
});
135128
});

0 commit comments

Comments
 (0)