Skip to content

Commit d1049a4

Browse files
author
Siddharth Saladi
committed
get fresh sideBarView on each poll attempt
1 parent 4c93498 commit d1049a4

1 file changed

Lines changed: 25 additions & 12 deletions

File tree

src/test/utils/testUtils.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright IBM Corp. 2023, 2026
44
*/
55
import path = require('path');
6-
import { Workbench, InputBox, DefaultTreeItem, ModalDialog, VSBrowser, WaitHelper, BottomBarPanel, OutputView, DebugToolbar } from 'vscode-extension-tester';
6+
import { Workbench, InputBox, DefaultTreeItem, ModalDialog, VSBrowser, WaitHelper, BottomBarPanel, OutputView, DebugToolbar, SideBarView } from 'vscode-extension-tester';
77
import * as fs from 'fs';
88
import { STOP_DASHBOARD_MAC_ACTION } from '../definitions/constants';
99
import { MapContextMenuforMac } from './macUtils';
@@ -198,20 +198,33 @@ export function getGradle9ProjectPath(): string {
198198

199199
export async function getDashboardSection(sidebar: any): Promise<any> {
200200
logger.info("Getting Liberty Tools section");
201-
return await waitForCondition(async () => {
202-
// Get fresh content on each iteration to avoid stale references
203-
const contentPart = sidebar.getContent();
204-
const sections = await contentPart.getSections();
205-
206-
// Find the Liberty Tools section
207-
for (const sec of sections) {
208-
const title = await sec.getTitle();
209-
if (title === 'Liberty Tools') {
210-
return sec;
201+
const wait = getWaitHelper();
202+
return await wait.forCondition(async () => {
203+
try {
204+
// Re-create SideBarView on every iteration — the captured sidebar
205+
// reference goes stale on workspace transitions and getSections()
206+
// throws on every call, bypassing the retry loop.
207+
const freshSidebar = new SideBarView();
208+
const sections = await freshSidebar.getContent().getSections();
209+
for (const sec of sections) {
210+
const title = await sec.getTitle();
211+
if (title === 'Liberty Tools') {
212+
return sec;
213+
}
214+
}
215+
} catch (error: any) {
216+
if (error.name === 'StaleElementReferenceError' ||
217+
error.name === 'ElementNotInteractableError') {
218+
return;
211219
}
220+
throw error;
212221
}
213222
return;
214-
}, 30);
223+
}, {
224+
timeout: 30000,
225+
pollInterval: 3000,
226+
message: 'Liberty Tools section was not found in sidebar within 30 seconds'
227+
});
215228
}
216229

217230
export async function getDashboardItem(section: any, projectName: string): Promise<DefaultTreeItem> {

0 commit comments

Comments
 (0)