{"record":{"id":"9a277bbfeccfec82","repo":"microsoft/playwright","slug":"not-a-function-fullmethod","errorCode":null,"errorMessage":"Not a function: ${fullMethod}","messagePattern":"Not a function: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/extension/src/relayConnection.ts","lineNumber":274,"sourceCode":"// listener installation.\nfunction resolveChromeMember(fullMethod: string): { obj: any; name: string } {\n  const parts = fullMethod.split('.');\n  if (parts[0] !== 'chrome' || parts.length < 3)\n    throw new Error(`Invalid chrome method: ${fullMethod}`);\n  let obj: any = chrome;\n  for (let i = 1; i < parts.length - 1; i++) {\n    obj = obj?.[parts[i]];\n    if (obj === undefined)\n      throw new Error(`Unknown chrome path: ${parts.slice(0, i + 1).join('.')}, calling ${fullMethod}`);\n  }\n  return { obj, name: parts[parts.length - 1] };\n}\n\nasync function invokeChromeMethod(fullMethod: string, args: any[]): Promise<any> {\n  const { obj, name } = resolveChromeMember(fullMethod);\n  const fn = obj[name] as (...a: any[]) => any;\n  if (typeof fn !== 'function')\n    throw new Error(`Not a function: ${fullMethod}`);\n  return await fn.apply(obj, args);\n}\n","sourceCodeStart":256,"sourceCodeEnd":277,"githubUrl":"https://github.com/microsoft/playwright/blob/c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6/packages/extension/src/relayConnection.ts#L256-L277","documentation":"Error \"Not a function: ${fullMethod}\" thrown in microsoft/playwright.","triggerScenarios":"Thrown at packages/extension/src/relayConnection.ts:274 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6","analyzedAt":"2026-08-12T07:26:36.950Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}