queryByText<E extends Element> function Null safety ByText Queries

E? queryByText<E extends Element>(
  1. Node container,
  2. dynamic text,
  3. {bool exact = true,
  4. NormalizerFn normalizer(
    1. [NormalizerOptions?]
  5. String? selector,
  6. dynamic ignore = 'script'}

Returns a single element with the given text content, defaulting to an exact match.

Returns null if no element is found within the provided container. Use getByText if a RTE is expected.

Prefer using ByRole queries when possible in order to query for elements in a way that most reflects how the user would interact with them.

Related: queryAllByText

See: testing-library.com/docs/queries/bytext/


The example below demonstrates the usage of the getByText query. However, the example is also relevant for getAllByText, queryByText, queryAllByText, findByText and findAllByText.

Read more about the different types of queries to gain more clarity on which one suits your use-cases best.

<a href="/about">About ℹ️</a>
import 'package:react/react.dart' as react;
import 'package:react_testing_library/matchers.dart' show isInTheDocument;
import 'package:react_testing_library/react_testing_library.dart' as rtl;
import 'package:test/test.dart';

main() {
  test('', () {
    // Render the DOM shown in the example snippet above
    final view = rtl.render(
      react.a({'href': '/about'}, 'About ℹ️'),

    expect(view.getByText(RegExp(r'^About')), isInTheDocument);

NOTE: render() supports React vDom elements / custom components created using either the react or over_react packages.

The examples shown here use the react package since the react_testing_library does not have a direct dependency on over_react - but both libraries are fully supported.



This argument can be set to a String, RegExp, or a Function which returns true for a match and false for a mismatch.

See the JS TextMatch docs for more details and examples.


Defaults to true; matches full strings, case-sensitive. When false, matches substrings and is not case-sensitive. It has no effect on regex or function arguments. In most cases using a regex instead of a string gives you more control over fuzzy matching and should be preferred over exact: false.


An optional function which overrides normalization behavior.

Before running any matching logic against text in the DOM, DOM Testing Library automatically normalizes that text. By default, normalization consists of trimming whitespace from the start and end of text, and collapsing multiple adjacent whitespace characters into a single space.

If you want to prevent that normalization, or provide alternative normalization (e.g. to remove Unicode control characters), you can provide a normalizer function. This function will be given a string and is expected to return a normalized version of that string.

NOTE: Specifying a value for normalizer replaces the built-in normalization, but you can call getDefaultNormalizer to obtain a built-in normalizer, either to adjust that normalization or to call it from your own normalizer.

See the JS TextMatch precision and JS TextMatch normalization docs for more details and examples.


Set selector to a CSS selector that will narrow the scope of the existing query to only match element(s) that match the selector.


The ignore option accepts a query selector.

If the node.matches returns true for that selector, the node will be ignored. This defaults to 'script' because generally you don't want to select script tags, but if your content is in an inline script file, then the script tag could be returned.

If you'd rather disable this behavior, set ignore to false.


E? queryByText<E extends Element>(
  Node container,
  /*TextMatch*/ dynamic text, {
  bool exact = true,
  NormalizerFn Function([NormalizerOptions?])? normalizer,
  String? selector,
  /*String|bool*/ dynamic ignore = 'script',
}) =>
    within(container).queryByText<E>(text, exact: exact, normalizer: normalizer, selector: selector, ignore: ignore);