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.

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
browser.$(selector)
Parameters
NameTypeDetails
selectorString, Function, Matcherselector, JS Function, or Matcher object to fetch a certain element
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();
});

Welcome! How can I help?

WebdriverIO AI Copilot