| // Not meant to extend QContextMenu, just to have utility methods here in case QContextMenu has bugs | 
|   | 
| import { QContextMenu } from '../e2elib/lib/api/pageobjects/qcontextmenu.component'; | 
|   | 
| /** | 
|  * Context menu item to click on. ContextMenu field to define the parent context menu technical name. | 
|  */ | 
| export interface ContextMenuItemSOP { | 
|   ContextMenu: string; | 
|   Name: string; | 
|   Label: string; | 
| } | 
|   | 
| export class ContextMenuSOP { | 
|   /** | 
|    * If menu disabled but has NO tooltip, we cannot invoke QContextMenu.isMenuItemClickable() as it will return error tooltip not visible. | 
|    * Caller decide if need verify tooltip so that we use the appropriate method to either check clickable only (without query tooltip) or | 
|    * invoke the usual QContextMenu.isMenuItemClickable() which returns tuple [boolean clickable, string tooltip]. | 
|    * | 
|    * @param contextMenu QContextMenu element to verify. | 
|    * @param menuItemName Context menu item name. | 
|    * @param needVerifyTooltip Caller decide if needs to verify tooltip. Pass false to skip tooltip check. | 
|    * @param waitTime [Optional] Miliseconds of how long it should wait for menu to be clickable. | 
|    * @returns An array of combination of boolean and string, where boolean indicates whether the menuItem is clickable and string indicating the disabled tooltip | 
|    */ | 
|   public static async verifyIsMenuItemClickable(contextMenu: QContextMenu, menuItemName: string | string[], needVerifyTooltip: boolean = true): Promise<[boolean, string]> { | 
|     let disabledTooltip = ''; | 
|     const isEnabled = await contextMenu.isMenuItemClickable(menuItemName); | 
|   | 
|     // Only query tooltip if caller wants to (else if menu disabled and has NO tooltip, an error tooltip not visible thrown) | 
|     if (needVerifyTooltip && !isEnabled) { | 
|       disabledTooltip = await contextMenu.getToolTip(menuItemName); | 
|     } | 
|   | 
|     return [isEnabled, disabledTooltip]; | 
|   } | 
|   | 
|   public static getMenuPaths(menuName: string): string | string[] { | 
|     const tokens = menuName.split('|'); | 
|   | 
|     return tokens.length === 1 ? menuName : tokens; | 
|   } | 
|  } |