@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.
@@ -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
  *
@@ -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 (launcherSelector) => {
55
+ await this.page.evaluate(async () => {
48
56
  await window.jupyterapp.commands.execute('application:close-all');
49
- await window.galata.waitForXPath(launcherSelector);
50
- }, this.launcherSelector);
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
- const tab = await this.getTab(name);
61
- return ((_a = (tab &&
62
- (await tab.evaluate((tab) => tab.classList.contains('lm-mod-current'))))) !== null && _a !== void 0 ? _a : false);
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
- const page = this.page;
72
- const tabSelector = name
73
- ? Utils.xpBuildActivityTabSelector(name)
74
- : Utils.xpBuildActiveActivityTabSelector();
75
- return page.$(`xpath=${tabSelector}`);
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
- const tab = await this.getTab(name);
86
- if (tab) {
87
- const id = await tab.evaluate((tab) => tab.getAttribute('data-id'));
88
- return await page.$(`xpath=${Utils.xpBuildActivityPanelSelector(id)}`);
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 null;
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 (launcherSelector) => {
165
+ await this.page.evaluate(async () => {
100
166
  await window.jupyterapp.commands.execute('application:close');
101
- await window.galata.waitForXPath(launcherSelector);
102
- }, this.launcherSelector);
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.classList.contains('jp-mod-current');
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":"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"}
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 Notebook path
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 Notebook path
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
- await fileItem.click({ clickCount: 2 });
117
- await this.page.waitForSelector(Utils.xpBuildActivityTabSelector(name), {
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":"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"}
1
+ {"version":3,"file":"filebrowser.js","sourceRoot":"","sources":["../../src/helpers/filebrowser.ts"],"names":[],"mappings":"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"}
@@ -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: () => Promise<boolean>;
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
  /**
@@ -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":"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"}
1
+ {"version":3,"file":"jupyterlabpage.js","sourceRoot":"","sources":["../src/jupyterlabpage.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ module.exports = {
17
17
  // Context options
18
18
  viewport: { width: 1024, height: 768 },
19
19
  // Artifacts
20
- // trace: 'on-first-retry',
20
+ trace: 'on-first-retry',
21
21
  video: 'retain-on-failure'
22
22
  }
23
23
  };
@@ -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,2BAA2B;QAC3B,KAAK,EAAE,mBAAmB;KAC3B;CACsB,CAAC"}
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[${xpContainsClass('jp-Activity')}]/ul/li[${xpContainsClass('lm-TabBar-tab')} and ./div[text()="${name}" and ${xpContainsClass('lm-TabBar-tabLabel')}]]`;
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[${xpContainsClass('jp-Activity')}]/ul/li[${xpContainsClass('lm-TabBar-tab')} and ${xpContainsClass('lm-mod-current')} and ./div[${xpContainsClass('lm-TabBar-tabLabel')}]]`;
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.4",
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.4",
48
- "@jupyterlab/apputils": "^4.1.4",
49
- "@jupyterlab/coreutils": "^6.0.4",
50
- "@jupyterlab/debugger": "^4.0.4",
51
- "@jupyterlab/docmanager": "^4.0.4",
52
- "@jupyterlab/nbformat": "^4.0.4",
53
- "@jupyterlab/notebook": "^4.0.4",
54
- "@jupyterlab/services": "^7.0.4",
55
- "@jupyterlab/settingregistry": "^4.0.4",
56
- "@lumino/coreutils": "^2.1.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",
@@ -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 (launcherSelector: string) => {
33
+ await this.page.evaluate(async () => {
25
34
  await window.jupyterapp.commands.execute('application:close-all');
26
- await window.galata.waitForXPath(launcherSelector);
27
- }, this.launcherSelector);
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
- const tab = await this.getTab(name);
38
- return (
39
- (tab &&
40
- (await tab.evaluate((tab: Element) =>
41
- tab.classList.contains('lm-mod-current')
42
- ))) ??
43
- false
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
- const page = this.page;
55
- const tabSelector = name
56
- ? Utils.xpBuildActivityTabSelector(name)
57
- : Utils.xpBuildActiveActivityTabSelector();
58
- return page.$(`xpath=${tabSelector}`);
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
- const tab = await this.getTab(name);
70
- if (tab) {
71
- const id = await tab.evaluate((tab: Element) =>
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
- return await page.$(`xpath=${Utils.xpBuildActivityPanelSelector(id!)}`);
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 null;
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 (launcherSelector: string) => {
153
+ await this.page.evaluate(async () => {
88
154
  await window.jupyterapp.commands.execute('application:close');
89
- await window.galata.waitForXPath(launcherSelector);
90
- }, this.launcherSelector);
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.classList.contains('jp-mod-current');
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 Notebook path
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
- await fileItem.click({ clickCount: 2 });
113
- await this.page.waitForSelector(Utils.xpBuildActivityTabSelector(name), {
114
- state: 'visible'
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
  }
@@ -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 = async (): Promise<boolean> => {
484
- const toggle = await this.page.$(
485
- '#jp-single-document-mode button.jp-switch'
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);
@@ -20,7 +20,7 @@ module.exports = {
20
20
  viewport: { width: 1024, height: 768 },
21
21
 
22
22
  // Artifacts
23
- // trace: 'on-first-retry',
23
+ trace: 'on-first-retry',
24
24
  video: 'retain-on-failure'
25
25
  }
26
26
  } as PlaywrightTestConfig;
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[${xpContainsClass('jp-Activity')}]/ul/li[${xpContainsClass(
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[${xpContainsClass('jp-Activity')}]/ul/li[${xpContainsClass(
268
+ return `//div[contains(@role, "main")]//ul/li[${xpContainsClass(
260
269
  'lm-TabBar-tab'
261
- )} and ${xpContainsClass('lm-mod-current')} and ./div[${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
+ }