diff --git a/packages/blockly/core/menuitem.ts b/packages/blockly/core/menuitem.ts index 9500e322c..c88e9c094 100644 --- a/packages/blockly/core/menuitem.ts +++ b/packages/blockly/core/menuitem.ts @@ -114,7 +114,12 @@ export class MenuItem { getAriaLabel(): string { // This fallback should only be hit by Context Menu items as all // FieldDropdown options should have an ARIA label. - return this.ariaLabel || String(this.content); + return ( + this.ariaLabel || + (typeof this.content === 'string' + ? this.content + : this.content.textContent) + ); } /** Dispose of this menu item. */ diff --git a/packages/blockly/tests/mocha/menu_item_test.js b/packages/blockly/tests/mocha/menu_item_test.js index 7690c0f18..fadb9f2c1 100644 --- a/packages/blockly/tests/mocha/menu_item_test.js +++ b/packages/blockly/tests/mocha/menu_item_test.js @@ -173,4 +173,14 @@ suite('Menu items', function () { this.menuItem.performAction(new Event('click')); assert.isTrue(called); }); + + test('return accurate ARIA labels for HTML elements', function () { + const div = document.createElement('div'); + const nestedDiv = document.createElement('div'); + nestedDiv.textContent = 'nested'; + div.textContent = 'test'; + div.appendChild(nestedDiv); + const testMenuItem = new Blockly.MenuItem(div); + assert.equal(testMenuItem.getAriaLabel(), 'testnested'); + }); });