nightwatch
Version:
Easy to use Node.js based end-to-end testing solution for web applications using the W3C WebDriver API.
74 lines (73 loc) • 2.34 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Element = require('../../element');
const BaseExpect = require('./_baseExpect.js');
class ExpectElements extends BaseExpect {
get needsFlags() {
return ['value'];
}
get hasAssertions() {
return true;
}
get promiseRejectedMsg() {
return 'Element was not found.';
}
/**
* If this is missing, it will be the main expect command name
* @return {string}
*/
get assertionsPath() {
return './elements';
}
constructor(opts) {
super(opts);
if (this.commandArgs[0] instanceof Promise) {
return;
}
this.createElement(...this.commandArgs);
}
async command(...args) {
if (!this.element && (this.commandArgs[0] instanceof Promise)) {
const value = await this.commandArgs[0];
this.element = {
value,
selector: 'elements'
};
this.flag('element', this.element);
this.resultValue = value;
this.retryUnavailable = true; //retry is not possible in this case
return this.resolve(value);
}
return this.locateElements();
}
locateElements() {
const { element } = this;
return this.elementLocator
.findElement({ element, returnSingleElement: false, cacheElementId: false })
.then(result => {
const { value, error } = result;
let elements;
if (value) {
elements = this.transport.mapWebElementIds(value);
}
else if (error instanceof Error && error.name === 'NoSuchElementError') {
elements = this.transport.mapWebElementIds([]);
}
else {
throw result;
}
this.resultValue = elements;
return this.resolve(elements);
});
}
retryCommand() {
const promise = this.locateElements();
this.handleCommandPromise(promise);
}
createElement(selector, using = this.client.locateStrategy) {
this.element = Element.createFromSelector(selector, using);
this.flag('element', this.element);
return this;
}
}
module.exports = ExpectElements;