---
name: "Weasel::FindExpanders"
section: "3pm"
platform: "linux"
package: "libweasel-perl"
version: "0.32-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Weasel::FindExpanders"
---

# Weasel::FindExpanders(3pm)

Mapping find patterns to xpath locators

## NAME

Weasel::FindExpanders - Mapping find patterns to xpath locators

## VERSION

version 0.32

## SYNOPSIS

```
  use Weasel::FindExpanders qw( register_find_expander );
  register_find_expander(
    'button',
    'HTML',
    sub {
       my %args = @_;
       $args{text} =~ s/'/''/g; # quote the quotes (XPath 2.0)
       return ".//button[text()='$args{text}']";
    });
  $session->find($session->page, "*button|{text=>\"whatever\"}");
```

## DESCRIPTION

The concept of *find expanders* is used to define XPath templates for use with the `"find"` and `"find_all"` methods. Multiple patterns may be registered with the same pattern name ("mnemonic"); eg, there could be a two patterns associated with the `"button"` mnemonic, one for the `"<button>"` tag and one for the `"<input type="submit">"` tag. Or there could even be more patterns registered, eg., to match Vue, React or Web Component elements. All patterns registered on a single mnemonic (template name) will be compiled into a single XPath expression which will match any of the patterns.

Weasel comes with a standard set of patterns in the Weasel::FindExpanders::HTML package.

## DEPENDENCIES

## SUBROUTINES/METHODS

- register\_find\_expander($pattern\_name, $group\_name, &expander\_function)

  Registers `&expander_function` as an expander for `$pattern_name` in `$group_name`.

  `"Weasel::Session"` selects the expanders to be applied using its `"groups"` attribute.

- expand\_finder\_pattern($pattern, $args, $groups)

  Returns a string of concatenated (using xpath '\|' operator) expansions.

  When `$groups` is undef, all groups will be searched for `"pattern_name"`.

  If the pattern doesn't match '\*\<pattern\_name\>\|{\<arguments\>}', the pattern is returned as the only list/arrayref element.

## AUTHOR

Erik Huelsmann

## CONTRIBUTORS

Erik Huelsmann Yves Lavoie

## MAINTAINERS

Erik Huelsmann

## BUGS AND LIMITATIONS

Bugs can be filed in the GitHub issue tracker for the Weasel project:\
  https://github.com/perl-weasel/weasel/issues

## SOURCE

The source code repository for Weasel is at\
  https://github.com/perl-weasel/weasel

## SUPPORT

Community support is available through perl-weasel@googlegroups.com \<mailto:perl-weasel@googlegroups.com\>.

## LICENSE AND COPYRIGHT

```
 (C) 2016-2023  Erik Huelsmann
```

Licensed under the same terms as Perl.
