* {{> selectOption }}
(select, option, context = null)
| 1686 | * {{> selectOption }} |
| 1687 | */ |
| 1688 | async selectOption(select, option, context = null) { |
| 1689 | const pageContext = await this._getContext() |
| 1690 | const matchedLocator = new Locator(select) |
| 1691 | |
| 1692 | let contextEl |
| 1693 | if (context) { |
| 1694 | const contextEls = await findElements.call(this, pageContext, context) |
| 1695 | assertElementExists(contextEls, context, 'Context element') |
| 1696 | contextEl = contextEls[0] |
| 1697 | } |
| 1698 | |
| 1699 | // Strict locator |
| 1700 | if (!matchedLocator.isFuzzy()) { |
| 1701 | this.debugSection('SelectOption', `Strict: ${JSON.stringify(select)}`) |
| 1702 | const els = contextEl ? await findElements.call(this, contextEl, select) : await this._locate(select) |
| 1703 | assertElementExists(els, select, 'Selectable element') |
| 1704 | return proceedSelect.call(this, pageContext, selectElement(els, select, this), option) |
| 1705 | } |
| 1706 | |
| 1707 | // Fuzzy: try combobox |
| 1708 | this.debugSection('SelectOption', `Fuzzy: "${matchedLocator.value}"`) |
| 1709 | const comboboxSearchCtx = contextEl || pageContext |
| 1710 | let els = await findByRole(comboboxSearchCtx, { role: 'combobox', name: matchedLocator.value }) |
| 1711 | if (els?.length) return proceedSelect.call(this, pageContext, selectElement(els, select, this), option) |
| 1712 | |
| 1713 | // Fuzzy: try listbox |
| 1714 | els = await findByRole(comboboxSearchCtx, { role: 'listbox', name: matchedLocator.value }) |
| 1715 | if (els?.length) return proceedSelect.call(this, pageContext, selectElement(els, select, this), option) |
| 1716 | |
| 1717 | // Fuzzy: try native select |
| 1718 | const visibleEls = await findVisibleFields.call(this, select, context) |
| 1719 | assertElementExists(visibleEls, select, 'Selectable field') |
| 1720 | return proceedSelect.call(this, pageContext, selectElement(visibleEls, select, this), option) |
| 1721 | } |
| 1722 | |
| 1723 | /** |
| 1724 | * {{> grabNumberOfVisibleElements }} |
nothing calls this directly
no test coverage detected