@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
64 lines • 3.97 kB
JavaScript
import { getElementFromResponse } from '../../utils/index.js';
/**
*
* Select option with displayed text matching the argument.
*
* <example>
:example.html
<select id="selectbox">
<option value="someValue0">uno</option>
<option value="someValue1">dos</option>
<option value="someValue2">tres</option>
<option value="someValue3">cuatro</option>
<option value="someValue4">cinco</option>
<option value="someValue5">seis</option>
</select>
:selectByVisibleText.js
it('demonstrate the selectByVisibleText command', async () => {
const selectBox = await $('#selectbox');
console.log(await selectBox.getText('option:checked')); // returns "uno"
await selectBox.selectByVisibleText('cuatro');
console.log(await selectBox.getText('option:checked')); // returns "cuatro"
})
* </example>
*
* @alias element.selectByVisibleText
* @param {String|Number} text text of option element to get selected
* @uses protocol/findElementsFromElement, protocol/elementClick
* @type action
*
*/
export async function selectByVisibleText(text) {
/**
* convert value into string
*/
text = typeof text === 'number'
? text.toString()
: text;
const normalized = text
.trim() // strip leading and trailing white-space characters
.replace(/\s+/, ' '); // replace sequences of whitespace characters by a single space
/**
* find option element using xpath
*/
const formatted = /"/.test(normalized)
? 'concat("' + normalized.split('"').join('", \'"\', "') + '")'
: `"${normalized}"`;
const dotFormat = `[. = ${formatted}]`;
const spaceFormat = `[normalize-space(text()) = ${formatted}]`;
const selections = [
`./option${dotFormat}`,
`./option${spaceFormat}`,
`./optgroup/option${dotFormat}`,
`./optgroup/option${spaceFormat}`,
];
const optionElement = await this.findElementFromElement(this.elementId, 'xpath', selections.join('|'));
if (optionElement && optionElement.error === 'no such element') {
throw new Error(`Option with text "${text}" not found.`);
}
/**
* select option
*/
return this.elementClick(getElementFromResponse(optionElement));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0QnlWaXNpYmxlVGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9lbGVtZW50L3NlbGVjdEJ5VmlzaWJsZVRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUVyQyxJQUFxQjtJQUVyQjs7T0FFRztJQUNILElBQUksR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRO1FBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFFVixNQUFNLFVBQVUsR0FBRyxJQUFJO1NBQ2xCLElBQUksRUFBRSxDQUFDLG9EQUFvRDtTQUMzRCxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBLENBQUMsK0RBQStEO0lBRXhGOztNQUVFO0lBQ0YsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJO1FBQy9ELENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFBO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLFFBQVEsU0FBUyxHQUFHLENBQUE7SUFDdEMsTUFBTSxXQUFXLEdBQUcsOEJBQThCLFNBQVMsR0FBRyxDQUFBO0lBRTlELE1BQU0sVUFBVSxHQUFHO1FBQ2YsV0FBVyxTQUFTLEVBQUU7UUFDdEIsV0FBVyxXQUFXLEVBQUU7UUFDeEIsb0JBQW9CLFNBQVMsRUFBRTtRQUMvQixvQkFBb0IsV0FBVyxFQUFFO0tBQ3BDLENBQUE7SUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFFdEcsSUFBSSxhQUFhLElBQUssYUFBcUIsQ0FBQyxLQUFLLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJLGNBQWMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFFRDs7TUFFRTtJQUNGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQVcsQ0FBQyxDQUFBO0FBQzdFLENBQUMifQ==