Using CSS and XPath

Using CSS and XPath to interact with a specific element or count the number of elements on a page.

In mabl, you can create custom find steps that find elements on the page using a CSS query or an XPath expression. There are two types of custom find steps:

  1. Find a specific element: Perform an action, such as click or hover, on the first or last element that matches a CSS query or XPath expression.
  2. Count the number of elements: Find all elements on the page that match a CSS query or XPath expression. Make an assertion on the number of elements or store the number in a variable.

📘

Finding elements in a shadow DOM

Only CSS queries can target elements in a shadow DOM. For more information on testing in the shadow DOM, check out this guide.

In most cases, using recorded actions and Configure Find is the preferred method for interacting with an application in the mabl Trainer. Mabl's native find capabilities facilitate more resilient tests that are easier to maintain. However, if the need arises, custom find steps give you the option to find page elements using CSS or XPath.

This guide describes use cases, setup, and supported actions for custom find steps.

Use cases

Finding a specific element

Custom find steps can find the first or last element on a page that matches a CSS query or XPath expression and interact with that element. Supported custom find interactions include:

  • Click actions: click, double-click, right-click
  • Entering text
  • Making an assertion
  • Creating a variable
  • Hover steps
  • Selecting an option from a dropdown
  • Sending keypresses
  • File uploads
  • Drag and drop action

👍

Try Configure Find first

Before you use a CSS query or XPath expression to find a specific element and interact with it, try using Configure Find to tell mabl what attributes the element you are looking for should have.

Configure Find handles a lot of the same use cases as steps that use CSS or XPath while also being more maintainable, since you don't need to know CSS or XPath to troubleshoot the step if something goes wrong.

You can use custom find steps with CSS and XPath to target elements that are tricky to find, including:

  • Elements whose distinguishing attributes do not appear in Configure Find
  • Elements that can only be identified in relation to another, non-ancestor element, such as a <div> that is adjacent to a <div> with a specific word in it
  • Elements that do not contain certain text, such as a button that does not start with the word "Submit": //button[not(starts-with(text(),"Submit"))]
  • The n-th element in a set of very similar elements that frequently changes and has no other distinguishing attributes, such as the fifth row of a table with very similar rows.

🚧

Custom find limitations

Custom find steps lack the following features:

Counting the number elements

Finding all the elements that match a CSS query or XPath expression can be useful in the following testing scenarios:

Scenario

Example

Determining the number of elements to loop over

You want to check off all the checkboxes in a list.

Asserting that there is a specific number of elements.

You want to confirm that the search results page displays 50 results by default.

Confirming that a page filter reduces a list to the correct number of elements.

You want to confirm that 20 results are displayed when you select "20" from a page filter.

Verify that there are no elements in the page that contain specific text: //*[text()[contains(.,”{{@myVar}}”)]]

You want to make sure the word "journey" does not appear anywhere on the page.

Setup

To create a custom find step in the mabl Trainer, take the following steps:

  1. Click on the plus sign to add a new step.
  2. Select Find elements to open the Find Elements menu:
694

The Find Elements menu

  1. Select a Find type:
    • "First element": find the first element that matches your CSS or XPath query.
    • "Last element": find the last element that matches your CSS or XPath query.
    • "Number of elements": count the number of elements that match your CSS or XPath query.
  2. Select a Query type: CSS or XPath.
  3. Enter a CSS query or XPath expression in the Query field. When you enter the query, mabl identifies matching elements on the current browser page.
2682

Identifying matching elements in the mabl Trainer

📘

Mabl variable syntax

Custom find steps may use mabl variable syntax in the query.

For example, a query may use a variable called sample_var to find a <div> element by its class as follows:

  • CSS: div.{{@sample_var}}
  • XPath: //div[@class="{{@sample_var}}"]
  1. Select an Action. See the following section, "Supported actions" for more details.

When you finish configuring the step, click OK to save the step and play it back in the Trainer.

Supported actions

This section outlines the finer details of specific custom find actions.

Click actions

Custom find click actions include click, double-click, and right-click. These actions require no additional steps besides providing the correct CSS or XPath query to target the correct element.

Enter text

For a custom find step that enters text, provide the text in the Text to enter field.

Make assertion

Mabl supports custom find assertions for all custom find types:

  • Finding a specific element: "First element" and "Last element"
  • Counting the number of elements: "Number of elements."

If the custom find assertion targets a specific element with CSS or XPath, you can use the element assertion menu to configure the assertion.

If the custom find assertion counts the number of elements matching a CSS or XPath query, you can assert against the count with a string or variable.

Create variable

Mabl supports custom find variables for all custom find types:

  • Finding a specific element: "First element" and "Last element"
  • Counting the number of elements: "Number of elements"

If the custom find variable targets a specific element with CSS or XPath, you can store a property of the target element in a variable. For example, you could target an element using CSS or XPath and store its innerText in a variable.

If the custom find variable counts the number of elements matching a CSS or XPath query, you can store the total number of matching elements in a variable.

Hover steps

Custom find hover steps require no additional steps besides providing the correct CSS or XPath query to target the correct element.

Selecting option

Custom find select actions interact with dropdowns that use the <select> and <option> tags. There are two types of custom find select actions:

  • Select the where the attribute
  • Select any option

If you choose "Select the where the attribute", you can configure the step to choose an option in the dropdown based on one of the following attributes:

  • Value: Select the option whose value equals a given string or variable.
  • Text: Select the option whose text equals a given string or variable.
  • Position: Select the option by its order in the dropdown. For example, select the third option in the dropdown.

If you choose "Select any option", mabl selects an unspecified option from the available options.

Send keypress

To create a custom find keypress step, select "Send keypress" in the Find Elements menu and click on the Next button.

The Trainer window loads a keypress menu where you can configure the step. For more information on creating custom find keypress steps, check out the guide to recording keypresses.

Drag and drop

Drag and drop steps are supported as recorded actions in the mabl Trainer. If you need to create drag and drop actions using CSS or XPath, combine these two custom find actions:

  • Click and hold: target the element that you want to move
  • Release: target the element where you want the first element to move to

Learn more