2022-08-18 01:00:12 +05:30
|
|
|
// 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'
|
|
|
|
|
|
2024-04-16 01:50:58 +05:30
|
|
|
const assert = require('node:assert')
|
2024-06-27 18:33:36 +01:00
|
|
|
const { Select, By } = require('selenium-webdriver')
|
2023-04-05 20:52:31 +05:30
|
|
|
const { Pages, suite } = require('../lib/test')
|
2024-06-27 18:33:36 +01:00
|
|
|
const { escapeQuotes } = require('selenium-webdriver/lib/select')
|
2022-08-18 01:00:12 +05:30
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
let singleSelectValues1 = {
|
|
|
|
|
name: 'selectomatic',
|
|
|
|
|
values: ['One', 'Two', 'Four', 'Still learning how to count, apparently'],
|
|
|
|
|
}
|
2022-09-18 22:29:57 +05:30
|
|
|
|
|
|
|
|
let disabledSingleSelect = {
|
|
|
|
|
name: 'single_disabled',
|
|
|
|
|
values: ['Enabled', 'Disabled'],
|
|
|
|
|
}
|
|
|
|
|
let disabledMultiSelect = {
|
|
|
|
|
name: 'multi_disabled',
|
|
|
|
|
values: ['Enabled', 'Disabled'],
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
let multiSelectValues1 = {
|
|
|
|
|
name: 'multi',
|
|
|
|
|
values: ['Eggs', 'Ham', 'Sausages', 'Onion gravy'],
|
|
|
|
|
}
|
|
|
|
|
let multiSelectValues2 = {
|
|
|
|
|
name: 'select_empty_multiple',
|
|
|
|
|
values: ['select_1', 'select_2', 'select_3', 'select_4'],
|
|
|
|
|
}
|
2022-08-18 01:00:12 +05:30
|
|
|
|
|
|
|
|
suite(
|
|
|
|
|
function (env) {
|
|
|
|
|
let driver
|
|
|
|
|
|
|
|
|
|
before(async function () {
|
|
|
|
|
driver = await env.builder().build()
|
|
|
|
|
})
|
|
|
|
|
after(async () => await driver.quit())
|
|
|
|
|
|
|
|
|
|
describe('Select by tests', function () {
|
|
|
|
|
it('Should be able to select by value', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(singleSelectValues1['name'])))
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let x in singleSelectValues1['values']) {
|
2024-02-07 16:07:24 +00:00
|
|
|
await selector.selectByValue(singleSelectValues1['values'][x].toLowerCase())
|
2022-08-22 19:42:48 +03:00
|
|
|
let ele = await selector.getFirstSelectedOption()
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.deepEqual(await ele.getText(), singleSelectValues1['values'][x])
|
2022-08-18 01:00:12 +05:30
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should be able to select by index', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(singleSelectValues1['name'])))
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let x in singleSelectValues1['values']) {
|
2022-08-18 01:00:12 +05:30
|
|
|
await selector.selectByIndex(x)
|
2022-08-22 19:42:48 +03:00
|
|
|
let ele = await selector.getFirstSelectedOption()
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.deepEqual(await ele.getText(), singleSelectValues1['values'][x])
|
2022-08-18 01:00:12 +05:30
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should be able to select by visible text', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(singleSelectValues1['name'])))
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let x in singleSelectValues1['values']) {
|
2022-08-18 01:00:12 +05:30
|
|
|
await selector.selectByVisibleText(singleSelectValues1['values'][x])
|
2022-08-22 19:42:48 +03:00
|
|
|
let ele = await selector.getFirstSelectedOption()
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.deepEqual(await ele.getText(), singleSelectValues1['values'][x])
|
2022-08-18 01:00:12 +05:30
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
2024-05-02 16:23:09 +05:30
|
|
|
it('Should be able to select by visible text with spaces', async function () {
|
|
|
|
|
await driver.get(Pages.selectSpacePage)
|
|
|
|
|
|
|
|
|
|
const elem = await driver.findElement(By.id('selectWithoutMultiple'))
|
|
|
|
|
const select = new Select(elem)
|
|
|
|
|
await select.selectByVisibleText(' five')
|
|
|
|
|
let selectedElement = await select.getFirstSelectedOption()
|
|
|
|
|
selectedElement.getText().then((text) => {
|
|
|
|
|
assert.strictEqual(text, ' five')
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should convert an unquoted string into one with quotes', async function () {
|
|
|
|
|
assert.strictEqual(escapeQuotes('abc'), '"abc"')
|
|
|
|
|
assert.strictEqual(escapeQuotes('abc aqewqqw'), '"abc aqewqqw"')
|
|
|
|
|
assert.strictEqual(escapeQuotes(''), '""')
|
|
|
|
|
assert.strictEqual(escapeQuotes(' '), '" "')
|
|
|
|
|
assert.strictEqual(escapeQuotes(' abc '), '" abc "')
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should add double quotes to a string that contains a single quote', async function () {
|
|
|
|
|
assert.strictEqual(escapeQuotes("f'oo"), `"f'oo"`)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should add single quotes to a string that contains a double quotes', async function () {
|
|
|
|
|
assert.strictEqual(escapeQuotes('f"oo'), `'f"oo'`)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should provide concatenated strings when string to escape contains both single and double quotes', async function () {
|
|
|
|
|
assert.strictEqual(escapeQuotes(`f"o'o`), `concat("f", '"', "o'o")`)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should provide concatenated strings when string ends with quote', async function () {
|
|
|
|
|
assert.strictEqual(escapeQuotes(`'"`), `concat("'", '"')`)
|
|
|
|
|
})
|
|
|
|
|
|
2022-08-18 21:37:41 +05:30
|
|
|
it('Should select by multiple index', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(multiSelectValues1['name'])))
|
2022-08-22 19:42:48 +03:00
|
|
|
await selector.deselectAll()
|
2022-08-18 21:37:41 +05:30
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let x in multiSelectValues1['values']) {
|
2022-08-18 21:37:41 +05:30
|
|
|
await selector.selectByIndex(x)
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
let ele = await selector.getAllSelectedOptions()
|
2022-08-18 21:37:41 +05:30
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let x in ele) {
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.deepEqual(await ele[x].getText(), multiSelectValues1['values'][x])
|
2022-08-18 21:37:41 +05:30
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should select by multiple value', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(multiSelectValues2['name'])))
|
2022-08-22 19:42:48 +03:00
|
|
|
await selector.deselectAll()
|
2022-08-18 21:37:41 +05:30
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let value of multiSelectValues2['values']) {
|
2022-08-18 21:37:41 +05:30
|
|
|
await selector.selectByValue(value)
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
let ele = await selector.getAllSelectedOptions()
|
2022-08-18 21:37:41 +05:30
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let x in ele) {
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.deepEqual(await ele[x].getText(), multiSelectValues2['values'][x])
|
2022-08-18 21:37:41 +05:30
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should select by multiple text', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(multiSelectValues2['name'])))
|
2022-08-22 19:42:48 +03:00
|
|
|
await selector.deselectAll()
|
2022-08-18 21:37:41 +05:30
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let value of multiSelectValues2['values']) {
|
2022-08-18 21:37:41 +05:30
|
|
|
await selector.selectByVisibleText(value)
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
let ele = await selector.getAllSelectedOptions()
|
2022-08-18 21:37:41 +05:30
|
|
|
|
2022-08-22 19:42:48 +03:00
|
|
|
for (let x in ele) {
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.deepEqual(await ele[x].getText(), multiSelectValues2['values'][x])
|
2022-08-18 21:37:41 +05:30
|
|
|
}
|
|
|
|
|
})
|
2022-09-18 22:29:57 +05:30
|
|
|
|
|
|
|
|
it('Should raise exception select by value single disabled', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(disabledSingleSelect['name'])))
|
2022-09-18 22:29:57 +05:30
|
|
|
|
|
|
|
|
await assert.rejects(
|
|
|
|
|
async () => {
|
2024-02-07 16:07:24 +00:00
|
|
|
await selector.selectByValue(disabledSingleSelect.values[1].toLowerCase())
|
2022-09-18 22:29:57 +05:30
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
assert.strictEqual(err.name, 'UnsupportedOperationError')
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.strictEqual(err.message, 'You may not select a disabled option')
|
2022-09-18 22:29:57 +05:30
|
|
|
return true
|
2024-02-07 16:07:24 +00:00
|
|
|
},
|
2022-09-18 22:29:57 +05:30
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should raise exception select by index single disabled', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(disabledSingleSelect['name'])))
|
2022-09-18 22:29:57 +05:30
|
|
|
|
|
|
|
|
await assert.rejects(
|
|
|
|
|
async () => {
|
|
|
|
|
await selector.selectByIndex(1)
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
assert.strictEqual(err.name, 'UnsupportedOperationError')
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.strictEqual(err.message, 'You may not select a disabled option')
|
2022-09-18 22:29:57 +05:30
|
|
|
return true
|
2024-02-07 16:07:24 +00:00
|
|
|
},
|
2022-09-18 22:29:57 +05:30
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should raise exception select by text single disabled', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(disabledSingleSelect['name'])))
|
2022-09-18 22:29:57 +05:30
|
|
|
|
|
|
|
|
await assert.rejects(
|
|
|
|
|
async () => {
|
|
|
|
|
await selector.selectByVisibleText(disabledSingleSelect.values[1])
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
assert.strictEqual(err.name, 'UnsupportedOperationError')
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.strictEqual(err.message, 'You may not select a disabled option')
|
2022-09-18 22:29:57 +05:30
|
|
|
return true
|
2024-02-07 16:07:24 +00:00
|
|
|
},
|
2022-09-18 22:29:57 +05:30
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should raise exception select by index multiple disabled', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(disabledMultiSelect['name'])))
|
2022-09-18 22:29:57 +05:30
|
|
|
|
|
|
|
|
await assert.rejects(
|
|
|
|
|
async () => {
|
|
|
|
|
await selector.selectByIndex(1)
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
assert.strictEqual(err.name, 'UnsupportedOperationError')
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.strictEqual(err.message, 'You may not select a disabled option')
|
2022-09-18 22:29:57 +05:30
|
|
|
return true
|
2024-02-07 16:07:24 +00:00
|
|
|
},
|
2022-09-18 22:29:57 +05:30
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should raise exception select by value multiple disabled', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(disabledMultiSelect['name'])))
|
2022-09-18 22:29:57 +05:30
|
|
|
|
|
|
|
|
await assert.rejects(
|
|
|
|
|
async () => {
|
2024-02-07 16:07:24 +00:00
|
|
|
await selector.selectByValue(disabledMultiSelect.values[1].toLowerCase())
|
2022-09-18 22:29:57 +05:30
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
assert.strictEqual(err.name, 'UnsupportedOperationError')
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.strictEqual(err.message, 'You may not select a disabled option')
|
2022-09-18 22:29:57 +05:30
|
|
|
return true
|
2024-02-07 16:07:24 +00:00
|
|
|
},
|
2022-09-18 22:29:57 +05:30
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it('Should raise exception select by text multiple disabled', async function () {
|
|
|
|
|
await driver.get(Pages.formPage)
|
|
|
|
|
|
2024-02-07 16:07:24 +00:00
|
|
|
let selector = new Select(driver.findElement(By.name(disabledMultiSelect['name'])))
|
2022-09-18 22:29:57 +05:30
|
|
|
|
|
|
|
|
await assert.rejects(
|
|
|
|
|
async () => {
|
|
|
|
|
await selector.selectByVisibleText(disabledMultiSelect.values[1])
|
|
|
|
|
},
|
|
|
|
|
(err) => {
|
|
|
|
|
assert.strictEqual(err.name, 'UnsupportedOperationError')
|
2024-02-07 16:07:24 +00:00
|
|
|
assert.strictEqual(err.message, 'You may not select a disabled option')
|
2022-09-18 22:29:57 +05:30
|
|
|
return true
|
2024-02-07 16:07:24 +00:00
|
|
|
},
|
2022-09-18 22:29:57 +05:30
|
|
|
)
|
|
|
|
|
})
|
2022-08-18 01:00:12 +05:30
|
|
|
})
|
|
|
|
|
},
|
2024-02-07 16:07:24 +00:00
|
|
|
{ browsers: ['firefox', 'chrome'] },
|
2022-08-18 01:00:12 +05:30
|
|
|
)
|