@luminati-io/webdriverio8
Version:
Next-gen browser and mobile automation test framework for Node.js
57 lines (55 loc) • 3.22 kB
JavaScript
import { getElementFromResponse } from '../../utils/index.js';
/**
*
* Select option with a specific value.
*
* <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 name="someName5" value="someValue5">seis</option>
</select>
:selectByAttribute.js
it('Should demonstrate the selectByAttribute command', async () => {
const selectBox = await $('#selectbox');
const value = await selectBox.getValue();
console.log(value); // returns "someValue0"
await selectBox.selectByAttribute('value', 'someValue3');
console.log(await selectBox.getValue()); // returns "someValue3"
await selectBox.selectByAttribute('name', 'someName5');
console.log(await selectBox.getValue()); // returns "someValue5"
});
* </example>
*
* @alias element.selectByAttribute
* @param {string} attribute attribute of option element to get selected
* @param {String|Number} value value of option element to get selected
* @uses protocol/findElementFromElement, protocol/elementClick
* @type action
*
*/
export async function selectByAttribute(attribute, value) {
/**
* convert value into string
*/
value = typeof value === 'number'
? value.toString()
: value;
/**
* find option elememnt using xpath
*/
const normalized = `[normalize-space(@${attribute.trim()}) = "${value.trim()}"]`;
const optionElement = await this.findElementFromElement(this.elementId, 'xpath', `./option${normalized}|./optgroup/option${normalized}`);
if (optionElement && optionElement.error === 'no such element') {
throw new Error(`Option with attribute "${attribute}=${value}" not found.`);
}
/**
* select option
*/
return this.elementClick(getElementFromResponse(optionElement));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0QnlBdHRyaWJ1dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvZWxlbWVudC9zZWxlY3RCeUF0dHJpYnV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBRW5DLFNBQWlCLEVBQ2pCLEtBQXNCO0lBRXRCOztPQUVHO0lBQ0gsS0FBSyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDbEIsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUVYOztNQUVFO0lBQ0YsTUFBTSxVQUFVLEdBQUcscUJBQXFCLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQTtJQUNoRixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FDbkQsSUFBSSxDQUFDLFNBQVMsRUFDZCxPQUFPLEVBQ1AsV0FBVyxVQUFVLHFCQUFxQixVQUFVLEVBQUUsQ0FDekQsQ0FBQTtJQUVELElBQUksYUFBYSxJQUFLLGFBQXFCLENBQUMsS0FBSyxLQUFLLGlCQUFpQixFQUFFLENBQUM7UUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsU0FBUyxJQUFJLEtBQUssY0FBYyxDQUFDLENBQUE7SUFDL0UsQ0FBQztJQUVEOztNQUVFO0lBQ0YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBVyxDQUFDLENBQUE7QUFDN0UsQ0FBQyJ9