Skip to content

Commit

Permalink
Fixed an issue where the error thrown in case of using incorrect argu…
Browse files Browse the repository at this point in the history
…ments for element commands was not reported if using async/await
  • Loading branch information
beatfactor committed Sep 11, 2022
1 parent 72743da commit e9e38c2
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 7 deletions.
2 changes: 1 addition & 1 deletion lib/core/asynctree.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class AsyncTree extends EventEmitter{
return err.waitFor;
}

return this.currentNode.rejectPromise;
return this.currentNode.rejectPromise || err.rejectPromise;
}

shouldRejectParentNodePromise(err) {
Expand Down
22 changes: 17 additions & 5 deletions lib/element/command.js
Original file line number Diff line number Diff line change
Expand Up @@ -263,13 +263,25 @@ class ElementCommand extends EventEmitter {
}

if (this.extraArgsCount !== null) {
const expectedArgs = ElementCommand.ELEMENT_COMMAND_ARGS + this.extraArgsCount;
if (this.args.length < expectedArgs - 1 || this.args.length > expectedArgs) {
throw new Error(`${this.commandName} method expects ${(expectedArgs - 1)} `+
`(or ${expectedArgs} if using implicit "css selector" strategy) arguments - ${this.args.length} given.`);
let expectedArgs = ElementCommand.ELEMENT_COMMAND_ARGS + this.extraArgsCount;
let passedArgs = this.args.length;
let rejectPromise;

if (this.client.isES6AsyncTestcase) {
expectedArgs = expectedArgs - 1;
passedArgs = passedArgs - 1;
rejectPromise = true;
}

if (Utils.isString(this.args[0]) && (expectedArgs === this.args.length || ElementCommand.isSelectorObject(this.args[1]))) {
if (passedArgs < expectedArgs - 1 || passedArgs > expectedArgs) {
const error = new Error(`${this.commandName} method expects ${(expectedArgs - 1)} `+
`(or ${expectedArgs} if using implicit "css selector" strategy) arguments - ${passedArgs} given.`);
error.rejectPromise = rejectPromise;

throw error;
}

if (Utils.isString(this.args[0]) && (expectedArgs === passedArgs || ElementCommand.isSelectorObject(this.args[1]))) {
this.setStrategyFromArgs();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe('element commands with incorrect args', function() {
it('getElementProperty', async function(browser) {
await browser.getElementProperty('aside');
})
})
1 change: 0 additions & 1 deletion test/src/api/commands/element/testGetElementProperty.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,4 @@ describe('getElementProperty', function() {

this.client.start(done);
});

});
21 changes: 21 additions & 0 deletions test/src/runner/testRunnerEs6Async.js
Original file line number Diff line number Diff line change
Expand Up @@ -300,4 +300,25 @@ describe('testRunner ES6 Async', function () {
globals
}));
});

it('test runner async with element incorrect args', function() {
const testsPath = path.join(__dirname, '../../sampletests/es6await/incorrect-element-args');

const globals = {
waitForConditionPollInterval: 50,
waitForConditionTimeout: 100,
retryAssertionTimeout: 150,

reporter(results) {
assert.strictEqual(results.errors, 1);
assert.ok(results.lastError instanceof Error);
assert.strictEqual(results.lastError.message, 'Error while running "getElementProperty" command: getElementProperty method expects 2 (or 3 if using implicit "css selector" strategy) arguments - 1 given.');
assert.strictEqual(results.lastError.rejectPromise, true);
}
};

return runTests(testsPath, settings({
globals
}));
});
});

0 comments on commit e9e38c2

Please sign in to comment.