Provides advanced filtering criteria for element selection, often used in conjunction with ElementOptions. These filters are applied AFTER an initial set of elements is found by the main selector in ElementOptions.

Definition

input ElementFilterOptions {
  has: ElementOptions
  hasNot: ElementOptions
  hasNotText: String
  hasText: String
  visible: Boolean
}

Fields

has: ElementOptions

Narrows down the selection to elements that have a descendant matching these ElementOptions. Example: To find a list item that contains a link with text “Details”: element(selector: "li", filter: { has: { role: "link", text: "Details" } })

hasNot: ElementOptions

Narrows down the selection to elements that DO NOT have a descendant matching these ElementOptions. Example: To find a product item that does not contain a “Sold Out” badge: element(selector: ".product", filter: { hasNot: { text: "Sold Out" } })

hasNotText: String

Filters elements that DO NOT contain the specified text anywhere in their DOM subtree. The match is case-insensitive. Can be a string or a regular expression pattern. Example: hasNotText: "spam" or hasNotText: "/advertisement/i"

hasText: String

Filters elements that contain the specified text anywhere in their DOM subtree. The match is case-insensitive. Can be a string or a regular expression pattern. Example: hasText: "important" or hasText: "/urgent/i"

visible: Boolean

Filters elements based on their visibility. If true, only currently visible elements are matched. If false, only hidden elements are matched. If not specified, visibility is not checked. Visibility is determined by factors like ‘display: none’, ‘visibility: hidden’, opacity, and element size.