@theia/playwright 1.66.0-next.41 → 1.66.0-next.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/theia-main-menu.d.ts +4 -0
- package/lib/theia-main-menu.d.ts.map +1 -1
- package/lib/theia-main-menu.js +23 -4
- package/lib/theia-main-menu.js.map +1 -1
- package/lib/theia-menu.d.ts.map +1 -1
- package/lib/theia-menu.js +20 -1
- package/lib/theia-menu.js.map +1 -1
- package/package.json +4 -4
- package/src/theia-main-menu.ts +25 -4
- package/src/theia-menu.ts +21 -1
package/lib/theia-main-menu.d.ts
CHANGED
|
@@ -5,6 +5,10 @@ export declare class TheiaMainMenu extends TheiaMenu {
|
|
|
5
5
|
selector: string;
|
|
6
6
|
}
|
|
7
7
|
export declare class TheiaMenuBar extends TheiaPageObject {
|
|
8
|
+
selector: string;
|
|
9
|
+
protected menubarElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement> | null>;
|
|
10
|
+
isVisible(): Promise<boolean>;
|
|
11
|
+
waitForVisible(): Promise<void>;
|
|
8
12
|
openMenu(menuName: string): Promise<TheiaMainMenu>;
|
|
9
13
|
visibleMenuBarItems(): Promise<string[]>;
|
|
10
14
|
protected menuBarItem(label?: string): Promise<ElementHandle<SVGElement | HTMLElement> | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theia-main-menu.d.ts","sourceRoot":"","sources":["../src/theia-main-menu.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,qBAAa,aAAc,SAAQ,SAAS;IAC/B,QAAQ,SAA8B;CAClD;AAED,qBAAa,YAAa,SAAQ,eAAe;
|
|
1
|
+
{"version":3,"file":"theia-main-menu.d.ts","sourceRoot":"","sources":["../src/theia-main-menu.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,qBAAa,aAAc,SAAQ,SAAS;IAC/B,QAAQ,SAA8B;CAClD;AAED,qBAAa,YAAa,SAAQ,eAAe;IAC7C,QAAQ,SAAiC;cAEzB,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;IAIzF,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAK7B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBlD,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAM9C,SAAS,CAAC,WAAW,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;IAI1F,SAAS,CAAC,mBAAmB,CAAC,KAAK,SAAK,GAAG,MAAM;CAIpD"}
|
package/lib/theia-main-menu.js
CHANGED
|
@@ -27,19 +27,38 @@ class TheiaMainMenu extends theia_menu_1.TheiaMenu {
|
|
|
27
27
|
}
|
|
28
28
|
exports.TheiaMainMenu = TheiaMainMenu;
|
|
29
29
|
class TheiaMenuBar extends theia_page_object_1.TheiaPageObject {
|
|
30
|
+
constructor() {
|
|
31
|
+
super(...arguments);
|
|
32
|
+
this.selector = (0, util_1.normalizeId)('#theia:menubar');
|
|
33
|
+
}
|
|
34
|
+
async menubarElementHandle() {
|
|
35
|
+
return this.page.$(this.selector);
|
|
36
|
+
}
|
|
37
|
+
async isVisible() {
|
|
38
|
+
const menuBar = await this.menubarElementHandle();
|
|
39
|
+
return !!menuBar && menuBar.isVisible();
|
|
40
|
+
}
|
|
41
|
+
async waitForVisible() {
|
|
42
|
+
await this.page.waitForSelector(this.selector, { state: 'visible' });
|
|
43
|
+
}
|
|
30
44
|
async openMenu(menuName) {
|
|
45
|
+
await this.waitForVisible();
|
|
31
46
|
const menuBarItem = await this.menuBarItem(menuName);
|
|
47
|
+
if (!menuBarItem) {
|
|
48
|
+
throw new Error(`Menu '${menuName}' not found!`);
|
|
49
|
+
}
|
|
32
50
|
const mainMenu = new TheiaMainMenu(this.app);
|
|
33
51
|
if (await mainMenu.isOpen()) {
|
|
34
|
-
await
|
|
52
|
+
await menuBarItem.hover();
|
|
35
53
|
}
|
|
36
54
|
else {
|
|
37
|
-
await
|
|
55
|
+
await menuBarItem.click();
|
|
38
56
|
}
|
|
39
|
-
mainMenu.waitForVisible();
|
|
57
|
+
await mainMenu.waitForVisible();
|
|
40
58
|
return mainMenu;
|
|
41
59
|
}
|
|
42
60
|
async visibleMenuBarItems() {
|
|
61
|
+
await this.waitForVisible();
|
|
43
62
|
const items = await this.page.$$(this.menuBarItemSelector());
|
|
44
63
|
return (0, util_1.toTextContentArray)(items);
|
|
45
64
|
}
|
|
@@ -47,7 +66,7 @@ class TheiaMenuBar extends theia_page_object_1.TheiaPageObject {
|
|
|
47
66
|
return this.page.waitForSelector(this.menuBarItemSelector(label));
|
|
48
67
|
}
|
|
49
68
|
menuBarItemSelector(label = '') {
|
|
50
|
-
return `${
|
|
69
|
+
return `${this.selector} .lm-MenuBar-itemLabel >> text=${label}`;
|
|
51
70
|
}
|
|
52
71
|
}
|
|
53
72
|
exports.TheiaMenuBar = TheiaMenuBar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theia-main-menu.js","sourceRoot":"","sources":["../src/theia-main-menu.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAIhF,6CAAyC;AACzC,2DAAsD;AACtD,iCAAyD;AAEzD,MAAa,aAAc,SAAQ,sBAAS;IAA5C;;QACa,aAAQ,GAAG,0BAA0B,CAAC;IACnD,CAAC;CAAA;AAFD,sCAEC;AAED,MAAa,YAAa,SAAQ,mCAAe;
|
|
1
|
+
{"version":3,"file":"theia-main-menu.js","sourceRoot":"","sources":["../src/theia-main-menu.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAIhF,6CAAyC;AACzC,2DAAsD;AACtD,iCAAyD;AAEzD,MAAa,aAAc,SAAQ,sBAAS;IAA5C;;QACa,aAAQ,GAAG,0BAA0B,CAAC;IACnD,CAAC;CAAA;AAFD,sCAEC;AAED,MAAa,YAAa,SAAQ,mCAAe;IAAjD;;QACI,aAAQ,GAAG,IAAA,kBAAW,EAAC,gBAAgB,CAAC,CAAC;IA+C7C,CAAC;IA7Ca,KAAK,CAAC,oBAAoB;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC3B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,cAAc,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACrB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC7D,OAAO,IAAA,yBAAkB,EAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAES,WAAW,CAAC,KAAK,GAAG,EAAE;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IAES,mBAAmB,CAAC,KAAK,GAAG,EAAE;QACpC,OAAO,GAAG,IAAI,CAAC,QAAQ,kCAAkC,KAAK,EAAE,CAAC;IACrE,CAAC;CAEJ;AAhDD,oCAgDC"}
|
package/lib/theia-menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theia-menu.d.ts","sourceRoot":"","sources":["../src/theia-menu.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,qBAAa,SAAU,SAAQ,eAAe;IAE1C,QAAQ,SAAc;cAEN,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;IAItF,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAK1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"theia-menu.d.ts","sourceRoot":"","sources":["../src/theia-menu.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,qBAAa,SAAU,SAAQ,eAAe;IAE1C,QAAQ,SAAc;cAEN,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;IAItF,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAK1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAYrC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAchE,kBAAkB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAsBhF,SAAS,CAAC,gBAAgB,CAAC,KAAK,SAAK,GAAG,MAAM;IAIxC,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAS9C"}
|
package/lib/theia-menu.js
CHANGED
|
@@ -42,6 +42,9 @@ class TheiaMenu extends theia_page_object_1.TheiaPageObject {
|
|
|
42
42
|
await this.page.waitForSelector(this.selector, { state: 'detached' });
|
|
43
43
|
}
|
|
44
44
|
async menuItems() {
|
|
45
|
+
if (!await this.isOpen()) {
|
|
46
|
+
throw new Error('Menu must be open before accessing menu items');
|
|
47
|
+
}
|
|
45
48
|
const menuHandle = await this.menuElementHandle();
|
|
46
49
|
if (!menuHandle) {
|
|
47
50
|
return [];
|
|
@@ -50,9 +53,15 @@ class TheiaMenu extends theia_page_object_1.TheiaPageObject {
|
|
|
50
53
|
return items.map(element => new theia_menu_item_1.TheiaMenuItem(element));
|
|
51
54
|
}
|
|
52
55
|
async clickMenuItem(name) {
|
|
56
|
+
if (!await this.isOpen()) {
|
|
57
|
+
throw new Error('Menu must be open before clicking menu items');
|
|
58
|
+
}
|
|
53
59
|
return (await this.page.waitForSelector(this.menuItemSelector(name))).click();
|
|
54
60
|
}
|
|
55
61
|
async menuItemByName(name) {
|
|
62
|
+
if (!await this.isOpen()) {
|
|
63
|
+
throw new Error('Menu must be open before accessing menu items by name');
|
|
64
|
+
}
|
|
56
65
|
const menuItems = await this.menuItems();
|
|
57
66
|
for (const item of menuItems) {
|
|
58
67
|
const label = await item.label();
|
|
@@ -63,10 +72,17 @@ class TheiaMenu extends theia_page_object_1.TheiaPageObject {
|
|
|
63
72
|
return undefined;
|
|
64
73
|
}
|
|
65
74
|
async menuItemByNamePath(...names) {
|
|
75
|
+
if (!await this.isOpen()) {
|
|
76
|
+
throw new Error('Menu must be open before accessing menu items by path');
|
|
77
|
+
}
|
|
66
78
|
let item;
|
|
67
79
|
for (let index = 0; index < names.length; index++) {
|
|
68
80
|
item = await this.page.waitForSelector(this.menuItemSelector(names[index]), { state: 'visible' });
|
|
69
|
-
|
|
81
|
+
// For all items except the last one, hover to open submenu
|
|
82
|
+
if (index < names.length - 1) {
|
|
83
|
+
await item.scrollIntoViewIfNeeded();
|
|
84
|
+
await item.hover();
|
|
85
|
+
}
|
|
70
86
|
}
|
|
71
87
|
const menuItemHandle = await (item === null || item === void 0 ? void 0 : item.$('xpath=..'));
|
|
72
88
|
if (menuItemHandle) {
|
|
@@ -78,6 +94,9 @@ class TheiaMenu extends theia_page_object_1.TheiaPageObject {
|
|
|
78
94
|
return `.lm-Menu-content .lm-Menu-itemLabel >> text=${label}`;
|
|
79
95
|
}
|
|
80
96
|
async visibleMenuItems() {
|
|
97
|
+
if (!await this.isOpen()) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
81
100
|
const menuItems = await this.menuItems();
|
|
82
101
|
const labels = await Promise.all(menuItems.map(item => item.label()));
|
|
83
102
|
return labels.filter(util_1.isDefined);
|
package/lib/theia-menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theia-menu.js","sourceRoot":"","sources":["../src/theia-menu.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAIhF,uDAAkD;AAClD,2DAAsD;AACtD,iCAAmC;AAEnC,MAAa,SAAU,SAAQ,mCAAe;IAA9C;;QAEI,aAAQ,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"theia-menu.js","sourceRoot":"","sources":["../src/theia-menu.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/playwright",
|
|
3
|
-
"version": "1.66.0-next.
|
|
3
|
+
"version": "1.66.0-next.67+6fae23c43",
|
|
4
4
|
"description": "System tests for Theia",
|
|
5
5
|
"license": "EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"compile": "theiaext compile",
|
|
17
17
|
"build": "theiaext build && npm run playwright:install",
|
|
18
18
|
"watch": "theiaext watch",
|
|
19
|
-
"theia:start": "rimraf .tmp.cfg &&
|
|
19
|
+
"theia:start": "cd ../browser && rimraf .tmp.cfg && cross-env THEIA_CONFIG_DIR=$PWD/.tmp.cfg npm run start",
|
|
20
20
|
"lint": "eslint -c ./.eslintrc.js --ext .ts ./src",
|
|
21
21
|
"lint:fix": "eslint -c ./.eslintrc.js --ext .ts ./src --fix",
|
|
22
22
|
"playwright:install": "playwright install chromium",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"fs-extra": "^9.0.8"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@theia/cli": "1.66.0-next.
|
|
39
|
+
"@theia/cli": "1.66.0-next.67+6fae23c43",
|
|
40
40
|
"@types/fs-extra": "^9.0.8",
|
|
41
41
|
"allure-commandline": "^2.23.1",
|
|
42
42
|
"allure-playwright": "^2.5.0",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
50
|
"main": "lib/index",
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "6fae23c43f4e850ef4dd6f7c85aa0422077f70e2"
|
|
52
52
|
}
|
package/src/theia-main-menu.ts
CHANGED
|
@@ -25,20 +25,41 @@ export class TheiaMainMenu extends TheiaMenu {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export class TheiaMenuBar extends TheiaPageObject {
|
|
28
|
+
selector = normalizeId('#theia:menubar');
|
|
29
|
+
|
|
30
|
+
protected async menubarElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement> | null> {
|
|
31
|
+
return this.page.$(this.selector);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async isVisible(): Promise<boolean> {
|
|
35
|
+
const menuBar = await this.menubarElementHandle();
|
|
36
|
+
return !!menuBar && menuBar.isVisible();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async waitForVisible(): Promise<void> {
|
|
40
|
+
await this.page.waitForSelector(this.selector, { state: 'visible' });
|
|
41
|
+
}
|
|
28
42
|
|
|
29
43
|
async openMenu(menuName: string): Promise<TheiaMainMenu> {
|
|
44
|
+
await this.waitForVisible();
|
|
45
|
+
|
|
30
46
|
const menuBarItem = await this.menuBarItem(menuName);
|
|
47
|
+
if (!menuBarItem) {
|
|
48
|
+
throw new Error(`Menu '${menuName}' not found!`);
|
|
49
|
+
}
|
|
50
|
+
|
|
31
51
|
const mainMenu = new TheiaMainMenu(this.app);
|
|
32
52
|
if (await mainMenu.isOpen()) {
|
|
33
|
-
await menuBarItem
|
|
53
|
+
await menuBarItem.hover();
|
|
34
54
|
} else {
|
|
35
|
-
await menuBarItem
|
|
55
|
+
await menuBarItem.click();
|
|
36
56
|
}
|
|
37
|
-
mainMenu.waitForVisible();
|
|
57
|
+
await mainMenu.waitForVisible();
|
|
38
58
|
return mainMenu;
|
|
39
59
|
}
|
|
40
60
|
|
|
41
61
|
async visibleMenuBarItems(): Promise<string[]> {
|
|
62
|
+
await this.waitForVisible();
|
|
42
63
|
const items = await this.page.$$(this.menuBarItemSelector());
|
|
43
64
|
return toTextContentArray(items);
|
|
44
65
|
}
|
|
@@ -48,7 +69,7 @@ export class TheiaMenuBar extends TheiaPageObject {
|
|
|
48
69
|
}
|
|
49
70
|
|
|
50
71
|
protected menuBarItemSelector(label = ''): string {
|
|
51
|
-
return `${
|
|
72
|
+
return `${this.selector} .lm-MenuBar-itemLabel >> text=${label}`;
|
|
52
73
|
}
|
|
53
74
|
|
|
54
75
|
}
|
package/src/theia-menu.ts
CHANGED
|
@@ -46,6 +46,9 @@ export class TheiaMenu extends TheiaPageObject {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
async menuItems(): Promise<TheiaMenuItem[]> {
|
|
49
|
+
if (!await this.isOpen()) {
|
|
50
|
+
throw new Error('Menu must be open before accessing menu items');
|
|
51
|
+
}
|
|
49
52
|
const menuHandle = await this.menuElementHandle();
|
|
50
53
|
if (!menuHandle) {
|
|
51
54
|
return [];
|
|
@@ -55,10 +58,16 @@ export class TheiaMenu extends TheiaPageObject {
|
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
async clickMenuItem(name: string): Promise<void> {
|
|
61
|
+
if (!await this.isOpen()) {
|
|
62
|
+
throw new Error('Menu must be open before clicking menu items');
|
|
63
|
+
}
|
|
58
64
|
return (await this.page.waitForSelector(this.menuItemSelector(name))).click();
|
|
59
65
|
}
|
|
60
66
|
|
|
61
67
|
async menuItemByName(name: string): Promise<TheiaMenuItem | undefined> {
|
|
68
|
+
if (!await this.isOpen()) {
|
|
69
|
+
throw new Error('Menu must be open before accessing menu items by name');
|
|
70
|
+
}
|
|
62
71
|
const menuItems = await this.menuItems();
|
|
63
72
|
for (const item of menuItems) {
|
|
64
73
|
const label = await item.label();
|
|
@@ -70,10 +79,18 @@ export class TheiaMenu extends TheiaPageObject {
|
|
|
70
79
|
}
|
|
71
80
|
|
|
72
81
|
async menuItemByNamePath(...names: string[]): Promise<TheiaMenuItem | undefined> {
|
|
82
|
+
if (!await this.isOpen()) {
|
|
83
|
+
throw new Error('Menu must be open before accessing menu items by path');
|
|
84
|
+
}
|
|
85
|
+
|
|
73
86
|
let item;
|
|
74
87
|
for (let index = 0; index < names.length; index++) {
|
|
75
88
|
item = await this.page.waitForSelector(this.menuItemSelector(names[index]), { state: 'visible' });
|
|
76
|
-
|
|
89
|
+
// For all items except the last one, hover to open submenu
|
|
90
|
+
if (index < names.length - 1) {
|
|
91
|
+
await item.scrollIntoViewIfNeeded();
|
|
92
|
+
await item.hover();
|
|
93
|
+
}
|
|
77
94
|
}
|
|
78
95
|
|
|
79
96
|
const menuItemHandle = await item?.$('xpath=..');
|
|
@@ -88,6 +105,9 @@ export class TheiaMenu extends TheiaPageObject {
|
|
|
88
105
|
}
|
|
89
106
|
|
|
90
107
|
async visibleMenuItems(): Promise<string[]> {
|
|
108
|
+
if (!await this.isOpen()) {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
91
111
|
const menuItems = await this.menuItems();
|
|
92
112
|
const labels = await Promise.all(menuItems.map(item => item.label()));
|
|
93
113
|
return labels.filter(isDefined);
|