UNPKG

@luminati-io/webdriverio8

Version:

Next-gen browser and mobile automation test framework for Node.js

57 lines (55 loc) 3.22 kB
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