@jupyterlab/galata 5.0.4 → 5.0.6
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/helpers/activity.d.ts +20 -1
- package/lib/helpers/activity.js +87 -21
- package/lib/helpers/activity.js.map +1 -1
- package/lib/helpers/filebrowser.d.ts +3 -2
- package/lib/helpers/filebrowser.js +24 -4
- package/lib/helpers/filebrowser.js.map +1 -1
- package/lib/jupyterlabpage.d.ts +32 -2
- package/lib/jupyterlabpage.js +23 -8
- package/lib/jupyterlabpage.js.map +1 -1
- package/lib/playwright-config.js +1 -1
- package/lib/playwright-config.js.map +1 -1
- package/lib/utils.d.ts +13 -0
- package/lib/utils.js +20 -3
- package/lib/utils.js.map +1 -1
- package/package.json +11 -11
- package/src/helpers/activity.ts +93 -27
- package/src/helpers/filebrowser.ts +25 -6
- package/src/jupyterlabpage.ts +38 -9
- package/src/playwright-config.ts +1 -1
- package/src/utils.ts +20 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementHandle, Page } from '@playwright/test';
|
|
1
|
+
import { ElementHandle, Locator, Page } from '@playwright/test';
|
|
2
2
|
/**
|
|
3
3
|
* Activity helper
|
|
4
4
|
*/
|
|
@@ -7,8 +7,14 @@ export declare class ActivityHelper {
|
|
|
7
7
|
constructor(page: Page);
|
|
8
8
|
/**
|
|
9
9
|
* JupyterLab launcher selector
|
|
10
|
+
*
|
|
11
|
+
* @deprecated You should use locator selector {@link launcher}
|
|
10
12
|
*/
|
|
11
13
|
get launcherSelector(): string;
|
|
14
|
+
/**
|
|
15
|
+
* JupyterLab launcher tab
|
|
16
|
+
*/
|
|
17
|
+
get launcher(): Locator;
|
|
12
18
|
/**
|
|
13
19
|
* Close all widgets in the main area
|
|
14
20
|
*/
|
|
@@ -27,6 +33,12 @@ export declare class ActivityHelper {
|
|
|
27
33
|
* @returns Handle on the tab or null if the tab is not found
|
|
28
34
|
*/
|
|
29
35
|
getTab(name?: string): Promise<ElementHandle<Element> | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Get a tab locator
|
|
38
|
+
* @param name Activity name
|
|
39
|
+
* @returns Tab locator
|
|
40
|
+
*/
|
|
41
|
+
getTabLocator(name?: string): Locator;
|
|
30
42
|
/**
|
|
31
43
|
* Get a handle on a panel
|
|
32
44
|
*
|
|
@@ -34,6 +46,13 @@ export declare class ActivityHelper {
|
|
|
34
46
|
* @returns Handle on the tab or null if the tab is not found
|
|
35
47
|
*/
|
|
36
48
|
getPanel(name?: string): Promise<ElementHandle<Element> | null>;
|
|
49
|
+
/**
|
|
50
|
+
* Get a panel locator
|
|
51
|
+
*
|
|
52
|
+
* @param name Activity name
|
|
53
|
+
* @returns Panel locator or null
|
|
54
|
+
*/
|
|
55
|
+
getPanelLocator(name?: string): Promise<Locator | null>;
|
|
37
56
|
/**
|
|
38
57
|
* Close a panel from its tab name
|
|
39
58
|
*
|
package/lib/helpers/activity.js
CHANGED
|
@@ -36,18 +36,26 @@ class ActivityHelper {
|
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
38
|
* JupyterLab launcher selector
|
|
39
|
+
*
|
|
40
|
+
* @deprecated You should use locator selector {@link launcher}
|
|
39
41
|
*/
|
|
40
42
|
get launcherSelector() {
|
|
41
43
|
return Utils.xpBuildActivityTabSelector('Launcher');
|
|
42
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* JupyterLab launcher tab
|
|
47
|
+
*/
|
|
48
|
+
get launcher() {
|
|
49
|
+
return this.page.getByRole('main').getByRole('tab', { name: 'Launcher' });
|
|
50
|
+
}
|
|
43
51
|
/**
|
|
44
52
|
* Close all widgets in the main area
|
|
45
53
|
*/
|
|
46
54
|
async closeAll() {
|
|
47
|
-
await this.page.evaluate(async (
|
|
55
|
+
await this.page.evaluate(async () => {
|
|
48
56
|
await window.jupyterapp.commands.execute('application:close-all');
|
|
49
|
-
|
|
50
|
-
|
|
57
|
+
});
|
|
58
|
+
await this.launcher.waitFor();
|
|
51
59
|
}
|
|
52
60
|
/**
|
|
53
61
|
* Whether a tab is active or not
|
|
@@ -57,9 +65,18 @@ class ActivityHelper {
|
|
|
57
65
|
*/
|
|
58
66
|
async isTabActive(name) {
|
|
59
67
|
var _a;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
if (await Utils.isInSimpleMode(this.page)) {
|
|
69
|
+
const activeTab = await this.page
|
|
70
|
+
.locator('#jp-title-panel-title')
|
|
71
|
+
.getByRole('textbox')
|
|
72
|
+
.inputValue();
|
|
73
|
+
return activeTab === name;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const tab = await this.getTab(name);
|
|
77
|
+
return ((_a = (tab &&
|
|
78
|
+
(await tab.evaluate((tab) => tab.classList.contains('jp-mod-current'))))) !== null && _a !== void 0 ? _a : false);
|
|
79
|
+
}
|
|
63
80
|
}
|
|
64
81
|
/**
|
|
65
82
|
* Get a handle on a tab
|
|
@@ -67,12 +84,25 @@ class ActivityHelper {
|
|
|
67
84
|
* @param name Activity name
|
|
68
85
|
* @returns Handle on the tab or null if the tab is not found
|
|
69
86
|
*/
|
|
70
|
-
getTab(name) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
async getTab(name) {
|
|
88
|
+
let handle = null;
|
|
89
|
+
try {
|
|
90
|
+
handle = await this.getTabLocator(name).elementHandle({ timeout: 500 });
|
|
91
|
+
}
|
|
92
|
+
catch (_a) {
|
|
93
|
+
handle = null;
|
|
94
|
+
}
|
|
95
|
+
return handle;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get a tab locator
|
|
99
|
+
* @param name Activity name
|
|
100
|
+
* @returns Tab locator
|
|
101
|
+
*/
|
|
102
|
+
getTabLocator(name) {
|
|
103
|
+
return name
|
|
104
|
+
? this.page.getByRole('main').getByRole('tab', { name })
|
|
105
|
+
: this.page.getByRole('main').locator('.jp-mod-current[role="tab"]');
|
|
76
106
|
}
|
|
77
107
|
/**
|
|
78
108
|
* Get a handle on a panel
|
|
@@ -82,12 +112,48 @@ class ActivityHelper {
|
|
|
82
112
|
*/
|
|
83
113
|
async getPanel(name) {
|
|
84
114
|
const page = this.page;
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
|
|
115
|
+
let locator;
|
|
116
|
+
if (name) {
|
|
117
|
+
locator = page.getByRole('main').getByRole('tabpanel', { name });
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const activeTab = await this.getTab();
|
|
121
|
+
const id = await (activeTab === null || activeTab === void 0 ? void 0 : activeTab.evaluate((tab) => tab.getAttribute('data-id')));
|
|
122
|
+
if (!id) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
locator = page.getByRole('main').locator(`[role="tabpanel"][id="${id}"]`);
|
|
126
|
+
}
|
|
127
|
+
let handle = null;
|
|
128
|
+
try {
|
|
129
|
+
handle = await locator.elementHandle({ timeout: 500 });
|
|
130
|
+
}
|
|
131
|
+
catch (_a) {
|
|
132
|
+
handle = null;
|
|
133
|
+
}
|
|
134
|
+
return handle;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get a panel locator
|
|
138
|
+
*
|
|
139
|
+
* @param name Activity name
|
|
140
|
+
* @returns Panel locator or null
|
|
141
|
+
*/
|
|
142
|
+
async getPanelLocator(name) {
|
|
143
|
+
let locator;
|
|
144
|
+
if (name) {
|
|
145
|
+
locator = this.page.getByRole('main').getByRole('tabpanel', { name });
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
const id = await this.getTabLocator().getAttribute('data-id');
|
|
149
|
+
if (!id) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
locator = this.page
|
|
153
|
+
.getByRole('main')
|
|
154
|
+
.locator(`[role="tabpanel"][id="${id}"]`);
|
|
89
155
|
}
|
|
90
|
-
return
|
|
156
|
+
return locator;
|
|
91
157
|
}
|
|
92
158
|
/**
|
|
93
159
|
* Close a panel from its tab name
|
|
@@ -96,10 +162,10 @@ class ActivityHelper {
|
|
|
96
162
|
*/
|
|
97
163
|
async closePanel(name) {
|
|
98
164
|
await this.activateTab(name);
|
|
99
|
-
await this.page.evaluate(async (
|
|
165
|
+
await this.page.evaluate(async () => {
|
|
100
166
|
await window.jupyterapp.commands.execute('application:close');
|
|
101
|
-
|
|
102
|
-
|
|
167
|
+
});
|
|
168
|
+
await this.launcher.waitFor();
|
|
103
169
|
}
|
|
104
170
|
/**
|
|
105
171
|
* Activate a tab is active
|
|
@@ -112,7 +178,7 @@ class ActivityHelper {
|
|
|
112
178
|
if (tab) {
|
|
113
179
|
await tab.click();
|
|
114
180
|
await this.page.waitForFunction(({ tab }) => {
|
|
115
|
-
return tab.
|
|
181
|
+
return tab.ariaSelected === 'true';
|
|
116
182
|
}, { tab });
|
|
117
183
|
return true;
|
|
118
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/helpers/activity.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;AAG3D,gDAAkC;AAElC;;GAEG;AACH,MAAa,cAAc;IACzB,YAAqB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAEnC
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/helpers/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,10 +48,11 @@ export declare class FileBrowserHelper {
|
|
|
48
48
|
* Note: This will double click on the file;
|
|
49
49
|
* an editor needs to be available for the given file type.
|
|
50
50
|
*
|
|
51
|
-
* @param filePath
|
|
51
|
+
* @param filePath File path
|
|
52
|
+
* @param factory Document factory to use
|
|
52
53
|
* @returns Action success status
|
|
53
54
|
*/
|
|
54
|
-
open(filePath: string): Promise<boolean>;
|
|
55
|
+
open(filePath: string, factory?: string): Promise<boolean>;
|
|
55
56
|
/**
|
|
56
57
|
* Open the Home directory.
|
|
57
58
|
*
|
|
@@ -105,16 +105,36 @@ class FileBrowserHelper {
|
|
|
105
105
|
* Note: This will double click on the file;
|
|
106
106
|
* an editor needs to be available for the given file type.
|
|
107
107
|
*
|
|
108
|
-
* @param filePath
|
|
108
|
+
* @param filePath File path
|
|
109
|
+
* @param factory Document factory to use
|
|
109
110
|
* @returns Action success status
|
|
110
111
|
*/
|
|
111
|
-
async open(filePath) {
|
|
112
|
+
async open(filePath, factory) {
|
|
112
113
|
await this.revealFileInBrowser(filePath);
|
|
113
114
|
const name = path.basename(filePath);
|
|
114
115
|
const fileItem = await this.page.$(`xpath=${this.xpBuildFileSelector(name)}`);
|
|
115
116
|
if (fileItem) {
|
|
116
|
-
|
|
117
|
-
|
|
117
|
+
if (factory) {
|
|
118
|
+
await fileItem.click({ button: 'right' });
|
|
119
|
+
await this.page
|
|
120
|
+
.getByRole('listitem')
|
|
121
|
+
.filter({ hasText: 'Open With' })
|
|
122
|
+
.click();
|
|
123
|
+
await this.page
|
|
124
|
+
.getByRole('menuitem', { name: factory, exact: true })
|
|
125
|
+
.click();
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
await fileItem.dblclick();
|
|
129
|
+
}
|
|
130
|
+
// Use `last` as if a file is already open, it will simply be activated
|
|
131
|
+
// if not it will be opened with optionally another factory (but we don't have a way
|
|
132
|
+
// to know that from the DOM).
|
|
133
|
+
await this.page
|
|
134
|
+
.getByRole('main')
|
|
135
|
+
.getByRole('tab', { name })
|
|
136
|
+
.last()
|
|
137
|
+
.waitFor({
|
|
118
138
|
state: 'visible'
|
|
119
139
|
});
|
|
120
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filebrowser.js","sourceRoot":"","sources":["../../src/helpers/filebrowser.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;AAG3D,2CAA6B;AAE7B,gDAAkC;AAElC;;GAEG;AACH,MAAa,iBAAiB;IAC5B,YACW,IAAU,EACV,QAAwB;QADxB,SAAI,GAAJ,IAAI,CAAM;QACV,aAAQ,GAAR,QAAQ,CAAgB;IAChC,CAAC;IAEJ;;;;;OAKG;IACH,mBAAmB,CAAC,QAAgB;QAClC,OAAO,uCAAuC,KAAK,CAAC,eAAe,CACjE,wBAAwB,CACzB,uBAAuB,QAAQ,MAAM,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,OAAe;QACtC,OAAO,8DAA8D,KAAK,CAAC,eAAe,CACxF,wBAAwB,CACzB,uBAAuB,OAAO,MAAM,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,GAAG,IAAI,CAAC,EAAE;YACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SACnC;QAED,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACtC,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAC5B,SAAS,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAC9C,CAAC;QACF,OAAO,IAAI,KAAK,IAAI,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;;YACnC,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CACrC,6CAA6C,CAC9C,CAAC;YACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;YAC9B,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAChB,SAAS,GAAG,MAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;aAC7D;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"filebrowser.js","sourceRoot":"","sources":["../../src/helpers/filebrowser.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;AAG3D,2CAA6B;AAE7B,gDAAkC;AAElC;;GAEG;AACH,MAAa,iBAAiB;IAC5B,YACW,IAAU,EACV,QAAwB;QADxB,SAAI,GAAJ,IAAI,CAAM;QACV,aAAQ,GAAR,QAAQ,CAAgB;IAChC,CAAC;IAEJ;;;;;OAKG;IACH,mBAAmB,CAAC,QAAgB;QAClC,OAAO,uCAAuC,KAAK,CAAC,eAAe,CACjE,wBAAwB,CACzB,uBAAuB,QAAQ,MAAM,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,OAAe;QACtC,OAAO,8DAA8D,KAAK,CAAC,eAAe,CACxF,wBAAwB,CACzB,uBAAuB,OAAO,MAAM,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,GAAG,IAAI,CAAC,EAAE;YACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SACnC;QAED,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;YACtC,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAC5B,SAAS,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAC9C,CAAC;QACF,OAAO,IAAI,KAAK,IAAI,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;;YACnC,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CACrC,6CAA6C,CAC9C,CAAC;YACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;YAC9B,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAChB,SAAS,GAAG,MAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;aAC7D;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAgB;QAC3C,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAErC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAChC,SAAS,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAC1C,CAAC;QACF,IAAI,QAAQ,EAAE;YACZ,IAAI,OAAO,EAAE;gBACX,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC1C,MAAM,IAAI,CAAC,IAAI;qBACZ,SAAS,CAAC,UAAU,CAAC;qBACrB,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;qBAChC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,CAAC,IAAI;qBACZ,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;qBACrD,KAAK,EAAE,CAAC;aACZ;iBAAM;gBACL,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;aAC3B;YACD,uEAAuE;YACvE,oFAAoF;YACpF,8BAA8B;YAC9B,MAAM,IAAI,CAAC,IAAI;iBACZ,SAAS,CAAC,MAAM,CAAC;iBACjB,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC;iBAC1B,IAAI,EAAE;iBACN,OAAO,CAAC;gBACP,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;SACN;aAAM;YACL,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAClC,6CAA6C,CAC9C,CAAC;QACF,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,KAAK,CAAC;SACd;QACD,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QAEzB,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;YACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CACrC,6CAA6C,CAC9C,CAAC;YACF,OAAO;YACL,uDAAuD;YACvD,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CACzE,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE;YACrC,OAAO,KAAK,CAAC;SACd;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE;YACnC,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC3B,SAAS;aACV;YACD,IAAI,IAAI,KAAK,EAAE,EAAE;gBACf,IAAI,IAAI,GAAG,CAAC;aACb;YAED,IAAI,IAAI,SAAS,CAAC;YAElB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE;gBAC3C,OAAO,KAAK,CAAC;aACd;YAED,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;gBACtC,OAAO,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,IAAI,CAAC;YACrD,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,CACvB,0CAA0C,KAAK,CAAC,eAAe,CAC7D,2BAA2B,CAC5B,gDAAgD,CAClD,CAAC;QAEF,IAAI,IAAI,EAAE;YACR,uCAAuC;YACvC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;oBAC1C,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC,CAAC;aACH,CAAC,CAAC;YACH,wBAAwB;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAChC;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;IACH,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,OAAe;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAC5B,SAAS,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAClD,CAAC;QACF,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;YAChD,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,wBAAwB;QACxB,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA9OD,8CA8OC"}
|
package/lib/jupyterlabpage.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Notification } from '@jupyterlab/apputils';
|
|
2
|
-
import type { ElementHandle, Page, Response } from '@playwright/test';
|
|
2
|
+
import type { ElementHandle, Locator, Page, Response } from '@playwright/test';
|
|
3
3
|
import { ContentsHelper } from './contents';
|
|
4
4
|
import { ActivityHelper, DebuggerHelper, FileBrowserHelper, KernelHelper, LogConsoleHelper, MenuHelper, NotebookHelper, PerformanceHelper, SidebarHelper, StatusBarHelper, StyleHelper, ThemeHelper } from './helpers';
|
|
5
5
|
/**
|
|
@@ -67,8 +67,14 @@ export interface IJupyterLabPage {
|
|
|
67
67
|
* JupyterLab theme helpers
|
|
68
68
|
*/
|
|
69
69
|
readonly theme: ThemeHelper;
|
|
70
|
+
/**
|
|
71
|
+
* JupyterLab launcher tab
|
|
72
|
+
*/
|
|
73
|
+
readonly launcher: Locator;
|
|
70
74
|
/**
|
|
71
75
|
* Selector for launcher tab
|
|
76
|
+
*
|
|
77
|
+
* @deprecated You should use locator selector {@link launcher}
|
|
72
78
|
*/
|
|
73
79
|
readonly launcherSelector: string;
|
|
74
80
|
/**
|
|
@@ -181,12 +187,17 @@ export interface IJupyterLabPage {
|
|
|
181
187
|
* Factory for active activity tab xpath
|
|
182
188
|
*
|
|
183
189
|
* @returns The selector
|
|
190
|
+
*
|
|
191
|
+
* @deprecated You should use locator selector `getByRole('main').locator('.jp-mod-current[role="tab"]')`
|
|
184
192
|
*/
|
|
185
193
|
xpBuildActiveActivityTabSelector(): string;
|
|
186
194
|
/**
|
|
187
195
|
* Factory for activity panel xpath by id
|
|
188
196
|
* @param id Panel id
|
|
189
197
|
* @returns The selector
|
|
198
|
+
*
|
|
199
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tabpanel', { name })`
|
|
200
|
+
* where `name` is the name of the tab.
|
|
190
201
|
*/
|
|
191
202
|
xpBuildActivityPanelSelector(id: string): string;
|
|
192
203
|
/**
|
|
@@ -194,6 +205,8 @@ export interface IJupyterLabPage {
|
|
|
194
205
|
*
|
|
195
206
|
* @param name Activity name
|
|
196
207
|
* @returns The selector
|
|
208
|
+
*
|
|
209
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tab', { name })`
|
|
197
210
|
*/
|
|
198
211
|
xpBuildActivityTabSelector(name: string): string;
|
|
199
212
|
/**
|
|
@@ -201,6 +214,8 @@ export interface IJupyterLabPage {
|
|
|
201
214
|
*
|
|
202
215
|
* @param className Class name
|
|
203
216
|
* @returns The selector
|
|
217
|
+
*
|
|
218
|
+
* @deprecated You should use locator CSS selector `locator('.className')`
|
|
204
219
|
*/
|
|
205
220
|
xpContainsClass(className: string): string;
|
|
206
221
|
}
|
|
@@ -276,8 +291,14 @@ export declare class JupyterLabPage implements IJupyterLabPage {
|
|
|
276
291
|
* JupyterLab debugger helper
|
|
277
292
|
*/
|
|
278
293
|
readonly debugger: DebuggerHelper;
|
|
294
|
+
/**
|
|
295
|
+
* JupyterLab launcher tab
|
|
296
|
+
*/
|
|
297
|
+
get launcher(): Locator;
|
|
279
298
|
/**
|
|
280
299
|
* Selector for launcher tab
|
|
300
|
+
*
|
|
301
|
+
* @deprecated You should use locator selector {@link launcher}
|
|
281
302
|
*/
|
|
282
303
|
get launcherSelector(): string;
|
|
283
304
|
/**
|
|
@@ -356,7 +377,7 @@ export declare class JupyterLabPage implements IJupyterLabPage {
|
|
|
356
377
|
/**
|
|
357
378
|
* Whether JupyterLab is in simple mode or not
|
|
358
379
|
*/
|
|
359
|
-
isInSimpleMode
|
|
380
|
+
isInSimpleMode(): Promise<boolean>;
|
|
360
381
|
/**
|
|
361
382
|
* Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
|
|
362
383
|
* last redirect.
|
|
@@ -420,21 +441,30 @@ export declare class JupyterLabPage implements IJupyterLabPage {
|
|
|
420
441
|
waitForTransition(element: ElementHandle<Element> | string): Promise<void>;
|
|
421
442
|
/**
|
|
422
443
|
* Factory for active activity tab xpath
|
|
444
|
+
*
|
|
445
|
+
* @deprecated You should use locator selector `getByRole('main').locator('.jp-mod-current[role="tab"]')`
|
|
423
446
|
*/
|
|
424
447
|
xpBuildActiveActivityTabSelector(): string;
|
|
425
448
|
/**
|
|
426
449
|
* Factory for activity panel xpath by id
|
|
427
450
|
* @param id Panel id
|
|
451
|
+
*
|
|
452
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tabpanel', { name })`
|
|
453
|
+
* where `name` is the name of the tab.
|
|
428
454
|
*/
|
|
429
455
|
xpBuildActivityPanelSelector(id: string): string;
|
|
430
456
|
/**
|
|
431
457
|
* Factory for activity tab xpath by name
|
|
432
458
|
* @param name Activity name
|
|
459
|
+
*
|
|
460
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tab', { name })`
|
|
433
461
|
*/
|
|
434
462
|
xpBuildActivityTabSelector(name: string): string;
|
|
435
463
|
/**
|
|
436
464
|
* Factory for element containing a given class xpath
|
|
437
465
|
* @param className Class name
|
|
466
|
+
*
|
|
467
|
+
* @deprecated You should use locator CSS selector `locator('.className')`
|
|
438
468
|
*/
|
|
439
469
|
xpContainsClass(className: string): string;
|
|
440
470
|
/**
|
package/lib/jupyterlabpage.js
CHANGED
|
@@ -45,14 +45,6 @@ class JupyterLabPage {
|
|
|
45
45
|
this.page = page;
|
|
46
46
|
this.baseURL = baseURL;
|
|
47
47
|
this.appPath = appPath;
|
|
48
|
-
/**
|
|
49
|
-
* Whether JupyterLab is in simple mode or not
|
|
50
|
-
*/
|
|
51
|
-
this.isInSimpleMode = async () => {
|
|
52
|
-
const toggle = await this.page.$('#jp-single-document-mode button.jp-switch');
|
|
53
|
-
const checked = (await (toggle === null || toggle === void 0 ? void 0 : toggle.getAttribute('aria-checked'))) === 'true';
|
|
54
|
-
return checked;
|
|
55
|
-
};
|
|
56
48
|
/**
|
|
57
49
|
* Wait for the application to be started
|
|
58
50
|
*/
|
|
@@ -87,8 +79,16 @@ class JupyterLabPage {
|
|
|
87
79
|
get notifications() {
|
|
88
80
|
return this.page.evaluate(async () => window.galata.getNotifications());
|
|
89
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* JupyterLab launcher tab
|
|
84
|
+
*/
|
|
85
|
+
get launcher() {
|
|
86
|
+
return this.activity.launcher;
|
|
87
|
+
}
|
|
90
88
|
/**
|
|
91
89
|
* Selector for launcher tab
|
|
90
|
+
*
|
|
91
|
+
* @deprecated You should use locator selector {@link launcher}
|
|
92
92
|
*/
|
|
93
93
|
get launcherSelector() {
|
|
94
94
|
return this.activity.launcherSelector;
|
|
@@ -166,6 +166,12 @@ class JupyterLabPage {
|
|
|
166
166
|
await this.waitIsReady(this.page, this);
|
|
167
167
|
return response;
|
|
168
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Whether JupyterLab is in simple mode or not
|
|
171
|
+
*/
|
|
172
|
+
isInSimpleMode() {
|
|
173
|
+
return Utils.isInSimpleMode(this.page);
|
|
174
|
+
}
|
|
169
175
|
/**
|
|
170
176
|
* Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
|
|
171
177
|
* last redirect.
|
|
@@ -258,6 +264,8 @@ class JupyterLabPage {
|
|
|
258
264
|
}
|
|
259
265
|
/**
|
|
260
266
|
* Factory for active activity tab xpath
|
|
267
|
+
*
|
|
268
|
+
* @deprecated You should use locator selector `getByRole('main').locator('.jp-mod-current[role="tab"]')`
|
|
261
269
|
*/
|
|
262
270
|
xpBuildActiveActivityTabSelector() {
|
|
263
271
|
return Utils.xpBuildActiveActivityTabSelector();
|
|
@@ -265,6 +273,9 @@ class JupyterLabPage {
|
|
|
265
273
|
/**
|
|
266
274
|
* Factory for activity panel xpath by id
|
|
267
275
|
* @param id Panel id
|
|
276
|
+
*
|
|
277
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tabpanel', { name })`
|
|
278
|
+
* where `name` is the name of the tab.
|
|
268
279
|
*/
|
|
269
280
|
xpBuildActivityPanelSelector(id) {
|
|
270
281
|
return Utils.xpBuildActivityPanelSelector(id);
|
|
@@ -272,6 +283,8 @@ class JupyterLabPage {
|
|
|
272
283
|
/**
|
|
273
284
|
* Factory for activity tab xpath by name
|
|
274
285
|
* @param name Activity name
|
|
286
|
+
*
|
|
287
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tab', { name })`
|
|
275
288
|
*/
|
|
276
289
|
xpBuildActivityTabSelector(name) {
|
|
277
290
|
return Utils.xpBuildActivityTabSelector(name);
|
|
@@ -279,6 +292,8 @@ class JupyterLabPage {
|
|
|
279
292
|
/**
|
|
280
293
|
* Factory for element containing a given class xpath
|
|
281
294
|
* @param className Class name
|
|
295
|
+
*
|
|
296
|
+
* @deprecated You should use locator CSS selector `locator('.className')`
|
|
282
297
|
*/
|
|
283
298
|
xpContainsClass(className) {
|
|
284
299
|
return Utils.xpContainsClass(className);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jupyterlabpage.js","sourceRoot":"","sources":["../src/jupyterlabpage.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;AAK3D,yCAA4C;AAE5C,uCAamB;AACnB,+CAAiC;
|
|
1
|
+
{"version":3,"file":"jupyterlabpage.js","sourceRoot":"","sources":["../src/jupyterlabpage.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;AAK3D,yCAA4C;AAE5C,uCAamB;AACnB,+CAAiC;AAyPjC;;GAEG;AACH,MAAa,cAAc;IACzB;;;;;;;OAOG;IACH,YACW,IAAU,EACV,OAAe,EACxB,kBAA2E,EAClE,UAAkB,MAAM;QAHxB,SAAI,GAAJ,IAAI,CAAM;QACV,YAAO,GAAP,OAAO,CAAQ;QAEf,YAAO,GAAP,OAAO,CAAiB;QAsanC;;WAEG;QACO,sBAAiB,GAAG,KAAK,IAAmB,EAAE;YACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;gBAC5B,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE;oBACzC,gCAAgC;oBAChC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;oBAChC,OAAO,IAAI,CAAC;iBACb;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;QAlbA,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,wBAAc,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,IAAI,2BAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAY,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,0BAAgB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,oBAAU,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,wBAAc,CAChC,IAAI,EACJ,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,IAAI,CACV,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,2BAAiB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,wBAAc,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;IAqCD;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC1E,CAAC;IAgCD;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;;QACjB,OAAO,MAAA,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,mCAAI,IAAI,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,KAAK,CAAC,IAAI,CACR,GAAY,EACZ,OAwBC;;QAED,MAAM,MAAM,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAC,MAAM,CAAC;YACpC,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,EAAE,CAAC;QAElD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5C,GAAG,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;YAClB,SAAS,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,kBAAkB;SACpD,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM,CAAC,OA0BZ;;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACtC,OAAO,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO;YACzB,SAAS,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,kBAAkB;SACpD,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,mCAAI,IAAI,EAAE;YACnC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACzC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,cAAc;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,mBAAmB;QACnB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC/B,mBAAmB;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAChC,kBAAkB;QAClB,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC5B,mBAAmB;QACnB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrB,MAAM,eAAe,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACpD,QAAQ,CACT,CAAqB,CAAC;YACvB,MAAM,QAAQ,GAAG,yCAAyC,CAAC;YAC3D,MAAM,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC,EACD;YACE,QAAQ,EACN,yCAA4E;SAC/E,CACF,CAAC;QACF,4BAA4B;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1C,oBAAoB;QACpB,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,MAAe;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAC9B,2CAA2C,CAC5C,CAAC;QACF,IAAI,MAAM,EAAE;YACV,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,MAAM,CAAC;YAEvE,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE;gBAChD,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChB,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;oBAC1C,MAAM,CAAC,KAAK,EAAE;iBACf,CAAC,CAAC;aACJ;YAED,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;gBACtC,OAAO,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,MAAM,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CACpB,SAA2C,EAC3C,OAAgB;QAEhB,OAAO,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB,CACrB,OAAwC;QAExC,OAAO,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,gCAAgC;QAC9B,OAAO,KAAK,CAAC,gCAAgC,EAAE,CAAC;IAClD,CAAC;IAED;;;;;;OAMG;IACH,4BAA4B,CAAC,EAAU;QACrC,OAAO,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,0BAA0B,CAAC,IAAY;QACrC,OAAO,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,SAAiB;QAC/B,OAAO,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,aAAa;QAC3B,kCAAkC;QAClC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACpD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACnD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;SAC1E;IACH,CAAC;CAyBF;AA1cD,wCA0cC"}
|
package/lib/playwright-config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-config.js","sourceRoot":"","sources":["../src/playwright-config.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,2DAA2D;;AAI3D,kDAAkD;AAClD,MAAM,CAAC,OAAO,GAAG;IACf,QAAQ,EAAE;QACR,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACpC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;KAC5D;IACD,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE,KAAK;IACd,GAAG,EAAE;QACH,kBAAkB;QAClB,mBAAmB;QACnB,eAAe;QAEf,kBAAkB;QAClB,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;QAEtC,YAAY;QACZ,
|
|
1
|
+
{"version":3,"file":"playwright-config.js","sourceRoot":"","sources":["../src/playwright-config.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,2DAA2D;;AAI3D,kDAAkD;AAClD,MAAM,CAAC,OAAO,GAAG;IACf,QAAQ,EAAE;QACR,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACpC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;KAC5D;IACD,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE,KAAK;IACd,GAAG,EAAE;QACH,kBAAkB;QAClB,mBAAmB;QACnB,eAAe;QAEf,kBAAkB;QAClB,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;QAEtC,YAAY;QACZ,KAAK,EAAE,gBAAgB;QACvB,KAAK,EAAE,mBAAmB;KAC3B;CACsB,CAAC"}
|
package/lib/utils.d.ts
CHANGED
|
@@ -62,6 +62,8 @@ export declare function waitForTransition(page: Page, element: ElementHandle<Ele
|
|
|
62
62
|
*
|
|
63
63
|
* @param className Class name
|
|
64
64
|
* @returns Selector
|
|
65
|
+
*
|
|
66
|
+
* @deprecated You should use locator CSS selector `locator('.className')`
|
|
65
67
|
*/
|
|
66
68
|
export declare function xpContainsClass(className: string): string;
|
|
67
69
|
/**
|
|
@@ -69,6 +71,8 @@ export declare function xpContainsClass(className: string): string;
|
|
|
69
71
|
*
|
|
70
72
|
* @param name Activity name
|
|
71
73
|
* @returns Selector
|
|
74
|
+
*
|
|
75
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tab', { name })`
|
|
72
76
|
*/
|
|
73
77
|
export declare function xpBuildActivityTabSelector(name: string): string;
|
|
74
78
|
/**
|
|
@@ -76,11 +80,20 @@ export declare function xpBuildActivityTabSelector(name: string): string;
|
|
|
76
80
|
*
|
|
77
81
|
* @param id Activity id
|
|
78
82
|
* @returns Selector
|
|
83
|
+
*
|
|
84
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tabpanel', { name })`
|
|
85
|
+
* where `name` is the name of the tab.
|
|
79
86
|
*/
|
|
80
87
|
export declare function xpBuildActivityPanelSelector(id: string): string;
|
|
81
88
|
/**
|
|
82
89
|
* Get the selector to look for the currently active activity tab
|
|
83
90
|
*
|
|
84
91
|
* @returns Selector
|
|
92
|
+
*
|
|
93
|
+
* @deprecated You should use locator selector `getByRole('main').locator('.jp-mod-current[role="tab"]')`
|
|
85
94
|
*/
|
|
86
95
|
export declare function xpBuildActiveActivityTabSelector(): string;
|
|
96
|
+
/**
|
|
97
|
+
* Whether JupyterLab is in simple mode or not
|
|
98
|
+
*/
|
|
99
|
+
export declare function isInSimpleMode(page: Page): Promise<boolean>;
|
package/lib/utils.js
CHANGED
|
@@ -25,7 +25,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
return result;
|
|
26
26
|
};
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.xpBuildActiveActivityTabSelector = exports.xpBuildActivityPanelSelector = exports.xpBuildActivityTabSelector = exports.xpContainsClass = exports.waitForTransition = exports.waitForCondition = exports.getToken = exports.getOption = exports.getFilesInDirectory = exports.getElementClassList = exports.getBaseUrl = exports.base64EncodeFile = void 0;
|
|
28
|
+
exports.isInSimpleMode = exports.xpBuildActiveActivityTabSelector = exports.xpBuildActivityPanelSelector = exports.xpBuildActivityTabSelector = exports.xpContainsClass = exports.waitForTransition = exports.waitForCondition = exports.getToken = exports.getOption = exports.getFilesInDirectory = exports.getElementClassList = exports.getBaseUrl = exports.base64EncodeFile = void 0;
|
|
29
29
|
const coreutils_1 = require("@jupyterlab/coreutils");
|
|
30
30
|
const fs = __importStar(require("fs-extra"));
|
|
31
31
|
const path = __importStar(require("path"));
|
|
@@ -216,6 +216,8 @@ exports.waitForTransition = waitForTransition;
|
|
|
216
216
|
*
|
|
217
217
|
* @param className Class name
|
|
218
218
|
* @returns Selector
|
|
219
|
+
*
|
|
220
|
+
* @deprecated You should use locator CSS selector `locator('.className')`
|
|
219
221
|
*/
|
|
220
222
|
function xpContainsClass(className) {
|
|
221
223
|
return `contains(concat(" ", normalize-space(@class), " "), " ${className} ")`;
|
|
@@ -226,9 +228,11 @@ exports.xpContainsClass = xpContainsClass;
|
|
|
226
228
|
*
|
|
227
229
|
* @param name Activity name
|
|
228
230
|
* @returns Selector
|
|
231
|
+
*
|
|
232
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tab', { name })`
|
|
229
233
|
*/
|
|
230
234
|
function xpBuildActivityTabSelector(name) {
|
|
231
|
-
return `//div[
|
|
235
|
+
return `//div[contains(@role, "main")]//ul/li[${xpContainsClass('lm-TabBar-tab')} and ./div[text()="${name}" and ${xpContainsClass('lm-TabBar-tabLabel')}]]`;
|
|
232
236
|
}
|
|
233
237
|
exports.xpBuildActivityTabSelector = xpBuildActivityTabSelector;
|
|
234
238
|
/**
|
|
@@ -236,6 +240,9 @@ exports.xpBuildActivityTabSelector = xpBuildActivityTabSelector;
|
|
|
236
240
|
*
|
|
237
241
|
* @param id Activity id
|
|
238
242
|
* @returns Selector
|
|
243
|
+
*
|
|
244
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tabpanel', { name })`
|
|
245
|
+
* where `name` is the name of the tab.
|
|
239
246
|
*/
|
|
240
247
|
function xpBuildActivityPanelSelector(id) {
|
|
241
248
|
return `//div[@id='${id}' and ${xpContainsClass('jp-Activity')} and ${xpContainsClass('lm-DockPanel-widget')}]`;
|
|
@@ -245,9 +252,19 @@ exports.xpBuildActivityPanelSelector = xpBuildActivityPanelSelector;
|
|
|
245
252
|
* Get the selector to look for the currently active activity tab
|
|
246
253
|
*
|
|
247
254
|
* @returns Selector
|
|
255
|
+
*
|
|
256
|
+
* @deprecated You should use locator selector `getByRole('main').locator('.jp-mod-current[role="tab"]')`
|
|
248
257
|
*/
|
|
249
258
|
function xpBuildActiveActivityTabSelector() {
|
|
250
|
-
return `//div[
|
|
259
|
+
return `//div[contains(@role, "main")]//ul/li[${xpContainsClass('lm-TabBar-tab')} and ${xpContainsClass('jp-mod-current')} and ./div[${xpContainsClass('lm-TabBar-tabLabel')}]]`;
|
|
251
260
|
}
|
|
252
261
|
exports.xpBuildActiveActivityTabSelector = xpBuildActiveActivityTabSelector;
|
|
262
|
+
/**
|
|
263
|
+
* Whether JupyterLab is in simple mode or not
|
|
264
|
+
*/
|
|
265
|
+
function isInSimpleMode(page) {
|
|
266
|
+
const toggle = page.getByRole('switch', { name: 'Simple' });
|
|
267
|
+
return toggle.isChecked();
|
|
268
|
+
}
|
|
269
|
+
exports.isInSimpleMode = isInSimpleMode;
|
|
253
270
|
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlab/galata",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.6",
|
|
4
4
|
"description": "JupyterLab UI Testing Framework",
|
|
5
5
|
"homepage": "https://github.com/jupyterlab/jupyterlab",
|
|
6
6
|
"bugs": {
|
|
@@ -44,16 +44,16 @@
|
|
|
44
44
|
"test:update": "jlpm test:base:update && jlpm test:benchmark:update"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@jupyterlab/application": "^4.0.
|
|
48
|
-
"@jupyterlab/apputils": "^4.1.
|
|
49
|
-
"@jupyterlab/coreutils": "^6.0.
|
|
50
|
-
"@jupyterlab/debugger": "^4.0.
|
|
51
|
-
"@jupyterlab/docmanager": "^4.0.
|
|
52
|
-
"@jupyterlab/nbformat": "^4.0.
|
|
53
|
-
"@jupyterlab/notebook": "^4.0.
|
|
54
|
-
"@jupyterlab/services": "^7.0.
|
|
55
|
-
"@jupyterlab/settingregistry": "^4.0.
|
|
56
|
-
"@lumino/coreutils": "^2.1.
|
|
47
|
+
"@jupyterlab/application": "^4.0.6",
|
|
48
|
+
"@jupyterlab/apputils": "^4.1.6",
|
|
49
|
+
"@jupyterlab/coreutils": "^6.0.6",
|
|
50
|
+
"@jupyterlab/debugger": "^4.0.6",
|
|
51
|
+
"@jupyterlab/docmanager": "^4.0.6",
|
|
52
|
+
"@jupyterlab/nbformat": "^4.0.6",
|
|
53
|
+
"@jupyterlab/notebook": "^4.0.6",
|
|
54
|
+
"@jupyterlab/services": "^7.0.6",
|
|
55
|
+
"@jupyterlab/settingregistry": "^4.0.6",
|
|
56
|
+
"@lumino/coreutils": "^2.1.2",
|
|
57
57
|
"@playwright/test": "^1.32.2",
|
|
58
58
|
"@stdlib/stats": "~0.0.13",
|
|
59
59
|
"fs-extra": "^10.1.0",
|
package/src/helpers/activity.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Jupyter Development Team.
|
|
2
2
|
// Distributed under the terms of the Modified BSD License.
|
|
3
3
|
|
|
4
|
-
import { ElementHandle, Page } from '@playwright/test';
|
|
4
|
+
import { ElementHandle, Locator, Page } from '@playwright/test';
|
|
5
5
|
import * as Utils from '../utils';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -12,19 +12,28 @@ export class ActivityHelper {
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* JupyterLab launcher selector
|
|
15
|
+
*
|
|
16
|
+
* @deprecated You should use locator selector {@link launcher}
|
|
15
17
|
*/
|
|
16
18
|
get launcherSelector(): string {
|
|
17
19
|
return Utils.xpBuildActivityTabSelector('Launcher');
|
|
18
20
|
}
|
|
19
21
|
|
|
22
|
+
/**
|
|
23
|
+
* JupyterLab launcher tab
|
|
24
|
+
*/
|
|
25
|
+
get launcher(): Locator {
|
|
26
|
+
return this.page.getByRole('main').getByRole('tab', { name: 'Launcher' });
|
|
27
|
+
}
|
|
28
|
+
|
|
20
29
|
/**
|
|
21
30
|
* Close all widgets in the main area
|
|
22
31
|
*/
|
|
23
32
|
async closeAll(): Promise<void> {
|
|
24
|
-
await this.page.evaluate(async (
|
|
33
|
+
await this.page.evaluate(async () => {
|
|
25
34
|
await window.jupyterapp.commands.execute('application:close-all');
|
|
26
|
-
|
|
27
|
-
|
|
35
|
+
});
|
|
36
|
+
await this.launcher.waitFor();
|
|
28
37
|
}
|
|
29
38
|
|
|
30
39
|
/**
|
|
@@ -34,14 +43,22 @@ export class ActivityHelper {
|
|
|
34
43
|
* @returns Active status
|
|
35
44
|
*/
|
|
36
45
|
async isTabActive(name: string): Promise<boolean> {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
if (await Utils.isInSimpleMode(this.page)) {
|
|
47
|
+
const activeTab = await this.page
|
|
48
|
+
.locator('#jp-title-panel-title')
|
|
49
|
+
.getByRole('textbox')
|
|
50
|
+
.inputValue();
|
|
51
|
+
return activeTab === name;
|
|
52
|
+
} else {
|
|
53
|
+
const tab = await this.getTab(name);
|
|
54
|
+
return (
|
|
55
|
+
(tab &&
|
|
56
|
+
(await tab.evaluate((tab: Element) =>
|
|
57
|
+
tab.classList.contains('jp-mod-current')
|
|
58
|
+
))) ??
|
|
59
|
+
false
|
|
60
|
+
);
|
|
61
|
+
}
|
|
45
62
|
}
|
|
46
63
|
|
|
47
64
|
/**
|
|
@@ -50,12 +67,25 @@ export class ActivityHelper {
|
|
|
50
67
|
* @param name Activity name
|
|
51
68
|
* @returns Handle on the tab or null if the tab is not found
|
|
52
69
|
*/
|
|
53
|
-
getTab(name?: string): Promise<ElementHandle<Element> | null> {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
70
|
+
async getTab(name?: string): Promise<ElementHandle<Element> | null> {
|
|
71
|
+
let handle: ElementHandle<Element> | null = null;
|
|
72
|
+
try {
|
|
73
|
+
handle = await this.getTabLocator(name).elementHandle({ timeout: 500 });
|
|
74
|
+
} catch {
|
|
75
|
+
handle = null;
|
|
76
|
+
}
|
|
77
|
+
return handle;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Get a tab locator
|
|
82
|
+
* @param name Activity name
|
|
83
|
+
* @returns Tab locator
|
|
84
|
+
*/
|
|
85
|
+
getTabLocator(name?: string): Locator {
|
|
86
|
+
return name
|
|
87
|
+
? this.page.getByRole('main').getByRole('tab', { name })
|
|
88
|
+
: this.page.getByRole('main').locator('.jp-mod-current[role="tab"]');
|
|
59
89
|
}
|
|
60
90
|
|
|
61
91
|
/**
|
|
@@ -66,15 +96,51 @@ export class ActivityHelper {
|
|
|
66
96
|
*/
|
|
67
97
|
async getPanel(name?: string): Promise<ElementHandle<Element> | null> {
|
|
68
98
|
const page = this.page;
|
|
69
|
-
|
|
70
|
-
if (
|
|
71
|
-
|
|
99
|
+
let locator: Locator;
|
|
100
|
+
if (name) {
|
|
101
|
+
locator = page.getByRole('main').getByRole('tabpanel', { name });
|
|
102
|
+
} else {
|
|
103
|
+
const activeTab = await this.getTab();
|
|
104
|
+
const id = await activeTab?.evaluate((tab: Element) =>
|
|
72
105
|
tab.getAttribute('data-id')
|
|
73
106
|
);
|
|
74
|
-
|
|
107
|
+
if (!id) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
locator = page.getByRole('main').locator(`[role="tabpanel"][id="${id}"]`);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
let handle: ElementHandle<Element> | null = null;
|
|
114
|
+
try {
|
|
115
|
+
handle = await locator.elementHandle({ timeout: 500 });
|
|
116
|
+
} catch {
|
|
117
|
+
handle = null;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return handle;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Get a panel locator
|
|
125
|
+
*
|
|
126
|
+
* @param name Activity name
|
|
127
|
+
* @returns Panel locator or null
|
|
128
|
+
*/
|
|
129
|
+
async getPanelLocator(name?: string): Promise<Locator | null> {
|
|
130
|
+
let locator: Locator;
|
|
131
|
+
if (name) {
|
|
132
|
+
locator = this.page.getByRole('main').getByRole('tabpanel', { name });
|
|
133
|
+
} else {
|
|
134
|
+
const id = await this.getTabLocator().getAttribute('data-id');
|
|
135
|
+
if (!id) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
locator = this.page
|
|
139
|
+
.getByRole('main')
|
|
140
|
+
.locator(`[role="tabpanel"][id="${id}"]`);
|
|
75
141
|
}
|
|
76
142
|
|
|
77
|
-
return
|
|
143
|
+
return locator;
|
|
78
144
|
}
|
|
79
145
|
|
|
80
146
|
/**
|
|
@@ -84,10 +150,10 @@ export class ActivityHelper {
|
|
|
84
150
|
*/
|
|
85
151
|
async closePanel(name: string): Promise<void> {
|
|
86
152
|
await this.activateTab(name);
|
|
87
|
-
await this.page.evaluate(async (
|
|
153
|
+
await this.page.evaluate(async () => {
|
|
88
154
|
await window.jupyterapp.commands.execute('application:close');
|
|
89
|
-
|
|
90
|
-
|
|
155
|
+
});
|
|
156
|
+
await this.launcher.waitFor();
|
|
91
157
|
}
|
|
92
158
|
|
|
93
159
|
/**
|
|
@@ -102,7 +168,7 @@ export class ActivityHelper {
|
|
|
102
168
|
await tab.click();
|
|
103
169
|
await this.page.waitForFunction(
|
|
104
170
|
({ tab }) => {
|
|
105
|
-
return tab.
|
|
171
|
+
return tab.ariaSelected === 'true';
|
|
106
172
|
},
|
|
107
173
|
{ tab }
|
|
108
174
|
);
|
|
@@ -98,10 +98,11 @@ export class FileBrowserHelper {
|
|
|
98
98
|
* Note: This will double click on the file;
|
|
99
99
|
* an editor needs to be available for the given file type.
|
|
100
100
|
*
|
|
101
|
-
* @param filePath
|
|
101
|
+
* @param filePath File path
|
|
102
|
+
* @param factory Document factory to use
|
|
102
103
|
* @returns Action success status
|
|
103
104
|
*/
|
|
104
|
-
async open(filePath: string): Promise<boolean> {
|
|
105
|
+
async open(filePath: string, factory?: string): Promise<boolean> {
|
|
105
106
|
await this.revealFileInBrowser(filePath);
|
|
106
107
|
const name = path.basename(filePath);
|
|
107
108
|
|
|
@@ -109,10 +110,28 @@ export class FileBrowserHelper {
|
|
|
109
110
|
`xpath=${this.xpBuildFileSelector(name)}`
|
|
110
111
|
);
|
|
111
112
|
if (fileItem) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
if (factory) {
|
|
114
|
+
await fileItem.click({ button: 'right' });
|
|
115
|
+
await this.page
|
|
116
|
+
.getByRole('listitem')
|
|
117
|
+
.filter({ hasText: 'Open With' })
|
|
118
|
+
.click();
|
|
119
|
+
await this.page
|
|
120
|
+
.getByRole('menuitem', { name: factory, exact: true })
|
|
121
|
+
.click();
|
|
122
|
+
} else {
|
|
123
|
+
await fileItem.dblclick();
|
|
124
|
+
}
|
|
125
|
+
// Use `last` as if a file is already open, it will simply be activated
|
|
126
|
+
// if not it will be opened with optionally another factory (but we don't have a way
|
|
127
|
+
// to know that from the DOM).
|
|
128
|
+
await this.page
|
|
129
|
+
.getByRole('main')
|
|
130
|
+
.getByRole('tab', { name })
|
|
131
|
+
.last()
|
|
132
|
+
.waitFor({
|
|
133
|
+
state: 'visible'
|
|
134
|
+
});
|
|
116
135
|
} else {
|
|
117
136
|
return false;
|
|
118
137
|
}
|
package/src/jupyterlabpage.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import type { Notification } from '@jupyterlab/apputils';
|
|
5
5
|
import type { ISettingRegistry } from '@jupyterlab/settingregistry';
|
|
6
|
-
import type { ElementHandle, Page, Response } from '@playwright/test';
|
|
6
|
+
import type { ElementHandle, Locator, Page, Response } from '@playwright/test';
|
|
7
7
|
import { ContentsHelper } from './contents';
|
|
8
8
|
import type { IPluginNameToInterfaceMap } from './extension';
|
|
9
9
|
import {
|
|
@@ -92,8 +92,15 @@ export interface IJupyterLabPage {
|
|
|
92
92
|
*/
|
|
93
93
|
readonly theme: ThemeHelper;
|
|
94
94
|
|
|
95
|
+
/**
|
|
96
|
+
* JupyterLab launcher tab
|
|
97
|
+
*/
|
|
98
|
+
readonly launcher: Locator;
|
|
99
|
+
|
|
95
100
|
/**
|
|
96
101
|
* Selector for launcher tab
|
|
102
|
+
*
|
|
103
|
+
* @deprecated You should use locator selector {@link launcher}
|
|
97
104
|
*/
|
|
98
105
|
readonly launcherSelector: string;
|
|
99
106
|
|
|
@@ -226,6 +233,8 @@ export interface IJupyterLabPage {
|
|
|
226
233
|
* Factory for active activity tab xpath
|
|
227
234
|
*
|
|
228
235
|
* @returns The selector
|
|
236
|
+
*
|
|
237
|
+
* @deprecated You should use locator selector `getByRole('main').locator('.jp-mod-current[role="tab"]')`
|
|
229
238
|
*/
|
|
230
239
|
xpBuildActiveActivityTabSelector(): string;
|
|
231
240
|
|
|
@@ -233,6 +242,9 @@ export interface IJupyterLabPage {
|
|
|
233
242
|
* Factory for activity panel xpath by id
|
|
234
243
|
* @param id Panel id
|
|
235
244
|
* @returns The selector
|
|
245
|
+
*
|
|
246
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tabpanel', { name })`
|
|
247
|
+
* where `name` is the name of the tab.
|
|
236
248
|
*/
|
|
237
249
|
xpBuildActivityPanelSelector(id: string): string;
|
|
238
250
|
|
|
@@ -241,6 +253,8 @@ export interface IJupyterLabPage {
|
|
|
241
253
|
*
|
|
242
254
|
* @param name Activity name
|
|
243
255
|
* @returns The selector
|
|
256
|
+
*
|
|
257
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tab', { name })`
|
|
244
258
|
*/
|
|
245
259
|
xpBuildActivityTabSelector(name: string): string;
|
|
246
260
|
|
|
@@ -249,6 +263,8 @@ export interface IJupyterLabPage {
|
|
|
249
263
|
*
|
|
250
264
|
* @param className Class name
|
|
251
265
|
* @returns The selector
|
|
266
|
+
*
|
|
267
|
+
* @deprecated You should use locator CSS selector `locator('.className')`
|
|
252
268
|
*/
|
|
253
269
|
xpContainsClass(className: string): string;
|
|
254
270
|
}
|
|
@@ -365,8 +381,17 @@ export class JupyterLabPage implements IJupyterLabPage {
|
|
|
365
381
|
*/
|
|
366
382
|
readonly debugger: DebuggerHelper;
|
|
367
383
|
|
|
384
|
+
/**
|
|
385
|
+
* JupyterLab launcher tab
|
|
386
|
+
*/
|
|
387
|
+
get launcher(): Locator {
|
|
388
|
+
return this.activity.launcher;
|
|
389
|
+
}
|
|
390
|
+
|
|
368
391
|
/**
|
|
369
392
|
* Selector for launcher tab
|
|
393
|
+
*
|
|
394
|
+
* @deprecated You should use locator selector {@link launcher}
|
|
370
395
|
*/
|
|
371
396
|
get launcherSelector(): string {
|
|
372
397
|
return this.activity.launcherSelector;
|
|
@@ -480,14 +505,9 @@ export class JupyterLabPage implements IJupyterLabPage {
|
|
|
480
505
|
/**
|
|
481
506
|
* Whether JupyterLab is in simple mode or not
|
|
482
507
|
*/
|
|
483
|
-
isInSimpleMode
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
);
|
|
487
|
-
const checked = (await toggle?.getAttribute('aria-checked')) === 'true';
|
|
488
|
-
|
|
489
|
-
return checked;
|
|
490
|
-
};
|
|
508
|
+
isInSimpleMode(): Promise<boolean> {
|
|
509
|
+
return Utils.isInSimpleMode(this.page);
|
|
510
|
+
}
|
|
491
511
|
|
|
492
512
|
/**
|
|
493
513
|
* Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
|
|
@@ -627,6 +647,8 @@ export class JupyterLabPage implements IJupyterLabPage {
|
|
|
627
647
|
|
|
628
648
|
/**
|
|
629
649
|
* Factory for active activity tab xpath
|
|
650
|
+
*
|
|
651
|
+
* @deprecated You should use locator selector `getByRole('main').locator('.jp-mod-current[role="tab"]')`
|
|
630
652
|
*/
|
|
631
653
|
xpBuildActiveActivityTabSelector(): string {
|
|
632
654
|
return Utils.xpBuildActiveActivityTabSelector();
|
|
@@ -635,6 +657,9 @@ export class JupyterLabPage implements IJupyterLabPage {
|
|
|
635
657
|
/**
|
|
636
658
|
* Factory for activity panel xpath by id
|
|
637
659
|
* @param id Panel id
|
|
660
|
+
*
|
|
661
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tabpanel', { name })`
|
|
662
|
+
* where `name` is the name of the tab.
|
|
638
663
|
*/
|
|
639
664
|
xpBuildActivityPanelSelector(id: string): string {
|
|
640
665
|
return Utils.xpBuildActivityPanelSelector(id);
|
|
@@ -643,6 +668,8 @@ export class JupyterLabPage implements IJupyterLabPage {
|
|
|
643
668
|
/**
|
|
644
669
|
* Factory for activity tab xpath by name
|
|
645
670
|
* @param name Activity name
|
|
671
|
+
*
|
|
672
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tab', { name })`
|
|
646
673
|
*/
|
|
647
674
|
xpBuildActivityTabSelector(name: string): string {
|
|
648
675
|
return Utils.xpBuildActivityTabSelector(name);
|
|
@@ -651,6 +678,8 @@ export class JupyterLabPage implements IJupyterLabPage {
|
|
|
651
678
|
/**
|
|
652
679
|
* Factory for element containing a given class xpath
|
|
653
680
|
* @param className Class name
|
|
681
|
+
*
|
|
682
|
+
* @deprecated You should use locator CSS selector `locator('.className')`
|
|
654
683
|
*/
|
|
655
684
|
xpContainsClass(className: string): string {
|
|
656
685
|
return Utils.xpContainsClass(className);
|
package/src/playwright-config.ts
CHANGED
package/src/utils.ts
CHANGED
|
@@ -221,6 +221,8 @@ export async function waitForTransition(
|
|
|
221
221
|
*
|
|
222
222
|
* @param className Class name
|
|
223
223
|
* @returns Selector
|
|
224
|
+
*
|
|
225
|
+
* @deprecated You should use locator CSS selector `locator('.className')`
|
|
224
226
|
*/
|
|
225
227
|
export function xpContainsClass(className: string): string {
|
|
226
228
|
return `contains(concat(" ", normalize-space(@class), " "), " ${className} ")`;
|
|
@@ -231,9 +233,11 @@ export function xpContainsClass(className: string): string {
|
|
|
231
233
|
*
|
|
232
234
|
* @param name Activity name
|
|
233
235
|
* @returns Selector
|
|
236
|
+
*
|
|
237
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tab', { name })`
|
|
234
238
|
*/
|
|
235
239
|
export function xpBuildActivityTabSelector(name: string): string {
|
|
236
|
-
return `//div[
|
|
240
|
+
return `//div[contains(@role, "main")]//ul/li[${xpContainsClass(
|
|
237
241
|
'lm-TabBar-tab'
|
|
238
242
|
)} and ./div[text()="${name}" and ${xpContainsClass('lm-TabBar-tabLabel')}]]`;
|
|
239
243
|
}
|
|
@@ -243,6 +247,9 @@ export function xpBuildActivityTabSelector(name: string): string {
|
|
|
243
247
|
*
|
|
244
248
|
* @param id Activity id
|
|
245
249
|
* @returns Selector
|
|
250
|
+
*
|
|
251
|
+
* @deprecated You should use locator selector `getByRole('main').getByRole('tabpanel', { name })`
|
|
252
|
+
* where `name` is the name of the tab.
|
|
246
253
|
*/
|
|
247
254
|
export function xpBuildActivityPanelSelector(id: string): string {
|
|
248
255
|
return `//div[@id='${id}' and ${xpContainsClass(
|
|
@@ -254,11 +261,21 @@ export function xpBuildActivityPanelSelector(id: string): string {
|
|
|
254
261
|
* Get the selector to look for the currently active activity tab
|
|
255
262
|
*
|
|
256
263
|
* @returns Selector
|
|
264
|
+
*
|
|
265
|
+
* @deprecated You should use locator selector `getByRole('main').locator('.jp-mod-current[role="tab"]')`
|
|
257
266
|
*/
|
|
258
267
|
export function xpBuildActiveActivityTabSelector(): string {
|
|
259
|
-
return `//div[
|
|
268
|
+
return `//div[contains(@role, "main")]//ul/li[${xpContainsClass(
|
|
260
269
|
'lm-TabBar-tab'
|
|
261
|
-
)} and ${xpContainsClass('
|
|
270
|
+
)} and ${xpContainsClass('jp-mod-current')} and ./div[${xpContainsClass(
|
|
262
271
|
'lm-TabBar-tabLabel'
|
|
263
272
|
)}]]`;
|
|
264
273
|
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Whether JupyterLab is in simple mode or not
|
|
277
|
+
*/
|
|
278
|
+
export function isInSimpleMode(page: Page): Promise<boolean> {
|
|
279
|
+
const toggle = page.getByRole('switch', { name: 'Simple' });
|
|
280
|
+
return toggle.isChecked();
|
|
281
|
+
}
|