ember-cli-page-object
Version:
This ember-cli addon eases the construction of page objects on your acceptance and integration tests
136 lines (106 loc) • 3.12 kB
JavaScript
import { run } from '../action';
import {
guardMultiple,
buildSelector,
findClosestValue
} from '../helpers';
import {
fillElement,
assertFocusable
} from './helpers';
import {
ELEMENT_NOT_FOUND,
throwBetterError
} from '../better-errors';
export default function AcceptanceExecutionContext(pageObjectNode) {
this.pageObjectNode = pageObjectNode;
}
AcceptanceExecutionContext.prototype = {
andThen(cb) {
return window.wait().then(() => {
cb(this);
});
},
runAsync(cb) {
return run(this.pageObjectNode, cb);
},
visit(path) {
/* global visit */
visit(path);
},
click(selector, container) {
/* global click */
click(selector, container);
},
fillIn(selector, container, options, content) {
let $selection = find(selector, container || findClosestValue(this.pageObjectNode, 'testContainer'));
/* global focus */
focus($selection);
fillElement($selection, content, {
selector,
pageObjectNode: this.pageObjectNode,
pageObjectKey: options.pageObjectKey
});
/* global triggerEvent */
triggerEvent(selector, container, 'input');
triggerEvent(selector, container, 'change');
},
triggerEvent(selector, container, options, eventName, eventOptions) {
/* global triggerEvent */
triggerEvent(selector, container, eventName, eventOptions);
},
focus(selector, options) {
let $selection = this.findWithAssert(selector, options);
assertFocusable($selection[0], {
selector,
pageObjectNode: this.pageObjectNode,
pageObjectKey: options.pageObjectKey
});
$selection.focus();
},
blur(selector, options) {
let $selection = this.findWithAssert(selector, options);
assertFocusable($selection[0], {
selector,
pageObjectNode: this.pageObjectNode,
pageObjectKey: options.pageObjectKey
});
$selection.blur();
},
assertElementExists(selector, options) {
/* global find */
let result = find(selector, options.testContainer || findClosestValue(this.pageObjectNode, 'testContainer'));
if (result.length === 0) {
throwBetterError(
this.pageObjectNode,
options.pageObjectKey,
ELEMENT_NOT_FOUND,
{ selector }
);
}
},
find(selector, options) {
let result;
selector = buildSelector(this.pageObjectNode, selector, options);
/* global find */
result = find(selector, options.testContainer || findClosestValue(this.pageObjectNode, 'testContainer'));
guardMultiple(result, selector, options.multiple);
return result;
},
findWithAssert(selector, options) {
let result;
selector = buildSelector(this.pageObjectNode, selector, options);
/* global find */
result = find(selector, options.testContainer || findClosestValue(this.pageObjectNode, 'testContainer'));
if (result.length === 0) {
throwBetterError(
this.pageObjectNode,
options.pageObjectKey,
ELEMENT_NOT_FOUND,
{ selector }
);
}
guardMultiple(result, selector, options.multiple);
return result;
}
};