blob: d4bc34981b58755377e0bd63eded5e0e79c053cc [file] [log] [blame]
import { PageObjectElement, Serializable } from './page_object_element';
import {
TestBed,
describePageObjectElement,
} from './page_object_element_test_cases';
describe('PageObjectElement on the browser', () => {
// This div will contain the top-level element in the HTML provided via the test bed.
let container: HTMLDivElement;
before(() => {
// The container's innerHTML will be overwritten at the beginning of each test case.
container = document.createElement('div');
document.body.appendChild(container);
});
after(() => {
container.remove();
});
const testBed: TestBed = {
setUpPageObjectElement: (html: string): Promise<PageObjectElement> => {
container.innerHTML = html;
// Make sure there is only one top-level element.
if (container.childElementCount !== 1) {
throw new Error(
'the given HTML contains more than one top-level element'
);
}
// Retrieve the top-level element and wrap it inside a PageObjectElement.
const element = container.firstElementChild as HTMLElement;
return Promise.resolve(new PageObjectElement(element));
},
evaluate: <T extends Serializable | void = void>(
fn: (el: HTMLElement) => T
) => Promise.resolve(fn(container.firstElementChild as HTMLElement)),
};
describePageObjectElement(testBed);
});