From 27fe2d9ba4c50430596a3b6a50c8081a6cd6c336 Mon Sep 17 00:00:00 2001 From: JS31096 <12621691+JS31096@users.noreply.github.com> Date: Mon, 4 Jan 2021 02:09:32 +0530 Subject: [PATCH] [JS] Adding support for computedrole (#8990) --- .../node/selenium-webdriver/lib/command.js | 1 + .../node/selenium-webdriver/lib/http.js | 2 + .../node/selenium-webdriver/lib/webdriver.js | 10 ++++ .../test/elementAriaRole_test.js | 59 +++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 javascript/node/selenium-webdriver/test/elementAriaRole_test.js diff --git a/javascript/node/selenium-webdriver/lib/command.js b/javascript/node/selenium-webdriver/lib/command.js index 37d5774531bef..be32e086dcc4e 100644 --- a/javascript/node/selenium-webdriver/lib/command.js +++ b/javascript/node/selenium-webdriver/lib/command.js @@ -140,6 +140,7 @@ const Name = { EXECUTE_ASYNC_SCRIPT: 'executeAsyncScript', GET_ELEMENT_TEXT: 'getElementText', + GET_COMPUTED_ROLE: 'getAriaRole', GET_ELEMENT_TAG_NAME: 'getElementTagName', IS_ELEMENT_SELECTED: 'isElementSelected', IS_ELEMENT_ENABLED: 'isElementEnabled', diff --git a/javascript/node/selenium-webdriver/lib/http.js b/javascript/node/selenium-webdriver/lib/http.js index 669e72f934548..09543ec9a3f4a 100644 --- a/javascript/node/selenium-webdriver/lib/http.js +++ b/javascript/node/selenium-webdriver/lib/http.js @@ -234,6 +234,7 @@ const COMMAND_MAP = new Map([ ], [cmd.Name.SUBMIT_ELEMENT, post('/session/:sessionId/element/:id/submit')], [cmd.Name.GET_ELEMENT_TEXT, get('/session/:sessionId/element/:id/text')], + [cmd.Name.GET_COMPUTED_ROLE, get('/session/:sessionId/element/:id/computedrole')], [cmd.Name.GET_ELEMENT_TAG_NAME, get('/session/:sessionId/element/:id/name')], [ cmd.Name.IS_ELEMENT_SELECTED, @@ -402,6 +403,7 @@ const W3C_COMMAND_MAP = new Map([ post('/session/:sessionId/element/:id/value'), ], [cmd.Name.GET_ELEMENT_TEXT, get('/session/:sessionId/element/:id/text')], + [cmd.Name.GET_COMPUTED_ROLE, get('/session/:sessionId/element/:id/computedrole')], [cmd.Name.IS_ELEMENT_ENABLED, get('/session/:sessionId/element/:id/enabled')], [ cmd.Name.GET_ELEMENT_ATTRIBUTE, diff --git a/javascript/node/selenium-webdriver/lib/webdriver.js b/javascript/node/selenium-webdriver/lib/webdriver.js index 4c7199cf21021..78f51f4bb8b8a 100644 --- a/javascript/node/selenium-webdriver/lib/webdriver.js +++ b/javascript/node/selenium-webdriver/lib/webdriver.js @@ -2324,6 +2324,16 @@ class WebElement { return this.execute_(new command.Command(command.Name.GET_ELEMENT_TEXT)) } + /** + * Get the computed WAI-ARIA role of element. + * + * @return {!Promise} A promise that will be + * resolved with the element's computed role. + */ + getAriaRole() { + return this.execute_(new command.Command(command.Name.GET_COMPUTED_ROLE)) + } + /** * Returns an object describing an element's location, in pixels relative to * the document element, and the element's size in pixels. diff --git a/javascript/node/selenium-webdriver/test/elementAriaRole_test.js b/javascript/node/selenium-webdriver/test/elementAriaRole_test.js new file mode 100644 index 0000000000000..2ac2af862f6fb --- /dev/null +++ b/javascript/node/selenium-webdriver/test/elementAriaRole_test.js @@ -0,0 +1,59 @@ +/* + * Licensed to the Software Freedom Conservancy (SFC) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The SFC licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +'use strict' + +const assert = require('assert') +const test = require('../lib/test') +const { By } = require('../index') + +test.suite( + function (env) { + let driver + + before(async function () { + driver = await env.builder().build() + }) + after(() => driver.quit()) + + describe('Testing Aria role', function () { + it('Should return explicitly defined role', async function () { + await driver.get(`data:text/html, +
Level 1 Header
`) + let header = driver.findElement(By.css('div')) + assert.equal(await header.getAriaRole(), 'heading') + }) + + it('Should return implicit role defined by tagName', async function () { + await driver.get(`data:text/html, +

Level 1 Header

`) + let header = driver.findElement(By.css('h1')) + assert.equal(await header.getAriaRole(), 'heading') + }) + + it('Should return explicit role even if it contradicts TagName', async function () { + await driver.get(`data:text/html, +

Level 1 Header

`) + let header = driver.findElement(By.css('h1')) + assert.equal(await header.getAriaRole(), 'alert') + }) + }) + }, + { browsers: ['chrome'] } +)