1 | const State = require("../state/State");
|
2 |
|
3 | /**
|
4 | * Class representing Page Map
|
5 | * @abstract
|
6 | * @type {AbstractPageMap}
|
7 | */
|
8 | class AbstractPageMap {
|
9 |
|
10 | constructor() {
|
11 | this.pages = new Map();
|
12 | }
|
13 |
|
14 | /**
|
15 | * Define page by page selector
|
16 | * @param {string} alias - alias of page
|
17 | * @param {string|RegExp} selector - regexp selector of page
|
18 | * @param {AbstractPage} pageObject - constructed page
|
19 | * @example
|
20 | * class PageMap extends AbstractPageMap {
|
21 | * constructor() {
|
22 | * super();
|
23 | * this.definePage("Your Page", /^.+page.html$/, new YourPage())
|
24 | * }
|
25 | * }
|
26 | */
|
27 | definePage(alias, selector, pageObject) {
|
28 | this.pages.set(alias, new PageDefinition(alias, selector, pageObject))
|
29 | }
|
30 |
|
31 | /**
|
32 | * Get page definition by alias
|
33 | * @param {string} alias - alias of page definition
|
34 | * @return {PageDefinition} - page definition by alias
|
35 | */
|
36 | getPage(alias) {
|
37 | const page = this.pages.get(alias);
|
38 | if (page) {
|
39 | return page
|
40 | } else {
|
41 | throw new Error(`${alias} page is not defined`)
|
42 | }
|
43 | }
|
44 |
|
45 | init() {
|
46 | State.setPageMap(this);
|
47 | }
|
48 |
|
49 | }
|
50 |
|
51 | /**
|
52 | * Class representing page definition
|
53 | * @type {PageDefinition}
|
54 | */
|
55 | class PageDefinition {
|
56 |
|
57 | /**
|
58 | * Page definition
|
59 | * @param {string} alias - alias
|
60 | * @param {string|RegExp} selector - selector
|
61 | * @param {AbstractPage} pageObject - page object
|
62 | */
|
63 | constructor(alias, selector, pageObject) {
|
64 | this.alias = alias;
|
65 | this.selector = selector;
|
66 | this.pageObject = pageObject;
|
67 | }
|
68 |
|
69 | }
|
70 |
|
71 | module.exports = AbstractPageMap; |
\ | No newline at end of file |