Skip to main content

$

The $ command is a short and handy way in order to fetch a single element on the page.

You can also pass in an object as selector where the object contains a property element-6066-11e4-a52e-4f735466cecf with the value of a reference to an element. The command will then transform the reference to an extended WebdriverIO element.

Note: chaining $ and $$ commands only make sense when you use multiple selector strategies. You will otherwise make unnecessary requests that slow down the test (e.g. $('body').$('div') will trigger two request whereas $('body div') does literally the same with just one request)

Note: only use these element objects if you are certain they still exist on the page, e.g. using the isExisting command. WebdriverIO is unable to refetch them given that there are no selector information available.

As of v10 this command is strict: if the selector resolves to more than one element it throws a StrictSelectorError rather than silently returning the first match. Use $$ when you expect multiple elements, pass { strict: false } to opt out for a single call, or set strictSelectors: false in your config to opt out globally. See the Selectors guide for details.

Using the wdio testrunner this command is a global variable, see Globals for more information. Using WebdriverIO within a standalone script it will be located on the browser object instead (e.g. browser.$$).

You can chain $ or $$ together without wrapping individual commands into await in order to walk down the DOM tree, e.g.:

const imageSrc = await $$('div')[1].nextElement().$$('img')[2].getAttribute('src')
info

For more information on how to select specific elements, check out the Selectors guide.

Usage

await browser.$(selector, { strict })

Parameters

NameTypeDetails
selectorString, Function, Matcherselector, JS Function, or Matcher object to fetch a certain element
options
optional
Objectcommand options
options.strict
optional
Booleanthrow if the selector matches more than one element (default: the strictSelectors config option, which defaults to true)

Examples

example.html
loading...
singleElements.js
loading...
singleElements.js
loading...
singleElements.js
loading...
$.js
it('should use Androids DataMatcher or ViewMatcher selector', async () => {
const menuItem = await $({
"name": "hasEntry",
"args": ["title", "ViewTitle"],
"class": "androidx.test.espresso.matcher.ViewMatchers"
});
await menuItem.click();

const menuItem = await $({
"name": "hasEntry",
"args": ["title", "ViewTitle"]
});
await menuItem.click();
});

Returns

  • <WebdriverIO.Element>

Welcome! How can I help?

WebdriverIO AI Copilot