Skip to content

Quality: getTabById returns undefined when tab not found despite non-nullable return type#8543

Open
kumburovicbranko682-boop wants to merge 1 commit into
DevExpress:masterfrom
kumburovicbranko682-boop:contribai/improve/quality/gettabbyid-returns-undefined-when-tab-no
Open

Quality: getTabById returns undefined when tab not found despite non-nullable return type#8543
kumburovicbranko682-boop wants to merge 1 commit into
DevExpress:masterfrom
kumburovicbranko682-boop:contribai/improve/quality/gettabbyid-returns-undefined-when-tab-no

Conversation

@kumburovicbranko682-boop

Copy link
Copy Markdown

✨ Code Quality

Problem

Array.prototype.find() returns undefined when no element matches, but the function declares its return type as Promise<TargetInfo> (non-nullable). The as TargetInfo cast silences the compiler but doesn't prevent undefined at runtime. Any caller accessing properties on the result (e.g., tab.url, tab.webSocketDebuggerUrl) will get a TypeError: "Cannot read properties of undefined". This is especially likely during race conditions where a tab closes between getTabs and the caller using the result.

Severity: high
File: src/browser/provider/built-in/dedicated/chrome/cdp-client/utils.ts

Solution

export async function getTabById (port: number, id: string): Promise<TargetInfo | undefined> {
const tabs = await getTabs(port);

return tabs.find(tab => tab.id === id);

}

// Or throw explicitly:
export async function getTabById (port: number, id: string): Promise {
const tabs = await getTabs(port);
const tab = tabs.find(tab => tab.id === id);

if (!tab)
    throw new Error(`Tab with id "${id}" not found`);

return tab;

}

Changes

  • src/browser/provider/built-in/dedicated/chrome/cdp-client/utils.ts (modified)

Purpose

Describe the problem you want to address or the feature you want to implement.

Approach

Describe how your changes address the issue or implement the desired functionality in as much detail as possible.

References

Provide a link to the existing issue(s), if any.

Pre-Merge TODO

  • Write tests for your proposed changes
  • Make sure that existing tests do not fail

🤖 About this PR

This pull request was generated by ContribAI, an AI agent
that helps improve open source projects. The change was:

  1. Discovered by automated code analysis
  2. Generated by AI with context-aware code generation
  3. Self-reviewed by AI quality checks

If you have questions or feedback about this PR, please comment below.
We appreciate your time reviewing this contribution!

Closes #8542

…spite non-nullable return type

`Array.prototype.find()` returns `undefined` when no element matches, but the function declares its return type as `Promise<TargetInfo>` (non-nullable). The `as TargetInfo` cast silences the compiler but doesn't prevent `undefined` at runtime. Any caller accessing properties on the result (e.g., `tab.url`, `tab.webSocketDebuggerUrl`) will get a TypeError: "Cannot read properties of undefined". This is especially likely during race conditions where a tab closes between `getTabs` and the caller using the result.


Affected files: utils.ts

Signed-off-by: kumburovicbranko682-boop <295886834+kumburovicbranko682-boop@users.noreply.github.com>
@testcafe-need-response-bot testcafe-need-response-bot Bot added the STATE: Need response An issue that requires a response or attention from the team. label Jun 27, 2026
@Bayheck Bayheck removed the STATE: Need response An issue that requires a response or attention from the team. label Jun 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(browser): gettabbyid returns undefined when tab not found despite non-nullable return type

2 participants