mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat: implement Locator.prototype.filter
(#10631)
This commit is contained in:
parent
47eecf5bb1
commit
e73d35def0
27
docs/api/puppeteer.locator.filter.md
Normal file
27
docs/api/puppeteer.locator.filter.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
sidebar_label: Locator.filter
|
||||||
|
---
|
||||||
|
|
||||||
|
# Locator.filter() method
|
||||||
|
|
||||||
|
Creates an expectation that is evaluated against located values.
|
||||||
|
|
||||||
|
If the expectations do not match, then the locator will retry.
|
||||||
|
|
||||||
|
#### Signature:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
class Locator {
|
||||||
|
filter<S extends T>(predicate: Predicate<T, S>): Locator<S>;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
| Parameter | Type | Description |
|
||||||
|
| --------- | ------------------------------------------------- | ----------- |
|
||||||
|
| predicate | [Predicate](./puppeteer.predicate.md)<T, S> | |
|
||||||
|
|
||||||
|
**Returns:**
|
||||||
|
|
||||||
|
[Locator](./puppeteer.locator.md)<S>
|
@ -26,6 +26,7 @@ export declare abstract class Locator<T> extends EventEmitter
|
|||||||
| ------------------------------------------------------------------------------------------------------ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ------------------------------------------------------------------------------------------------------ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| [click(this, options)](./puppeteer.locator.click.md) | | |
|
| [click(this, options)](./puppeteer.locator.click.md) | | |
|
||||||
| [fill(this, value, options)](./puppeteer.locator.fill.md) | | Fills out the input identified by the locator using the provided value. The type of the input is determined at runtime and the appropriate fill-out method is chosen based on the type. contenteditable, selector, inputs are supported. |
|
| [fill(this, value, options)](./puppeteer.locator.fill.md) | | Fills out the input identified by the locator using the provided value. The type of the input is determined at runtime and the appropriate fill-out method is chosen based on the type. contenteditable, selector, inputs are supported. |
|
||||||
|
| [filter(predicate)](./puppeteer.locator.filter.md) | | <p>Creates an expectation that is evaluated against located values.</p><p>If the expectations do not match, then the locator will retry.</p> |
|
||||||
| [hover(this, options)](./puppeteer.locator.hover.md) | | |
|
| [hover(this, options)](./puppeteer.locator.hover.md) | | |
|
||||||
| [map(mapper)](./puppeteer.locator.map.md) | | Maps the locator using the provided mapper. |
|
| [map(mapper)](./puppeteer.locator.map.md) | | Maps the locator using the provided mapper. |
|
||||||
| [off(eventName, handler)](./puppeteer.locator.off.md) | | |
|
| [off(eventName, handler)](./puppeteer.locator.off.md) | | |
|
||||||
|
@ -37,7 +37,7 @@ export type Predicate<From, To extends From = From> =
|
|||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
export class ExpectedLocator<From, To extends From> extends DelegatedLocator<
|
export class FilteredLocator<From, To extends From> extends DelegatedLocator<
|
||||||
From,
|
From,
|
||||||
To
|
To
|
||||||
> {
|
> {
|
@ -47,7 +47,7 @@ import {BoundingBox, ClickOptions, ElementHandle} from '../ElementHandle.js';
|
|||||||
import {
|
import {
|
||||||
Action,
|
Action,
|
||||||
AwaitedLocator,
|
AwaitedLocator,
|
||||||
ExpectedLocator,
|
FilteredLocator,
|
||||||
MappedLocator,
|
MappedLocator,
|
||||||
Mapper,
|
Mapper,
|
||||||
Predicate,
|
Predicate,
|
||||||
@ -671,10 +671,10 @@ export abstract class Locator<T> extends EventEmitter {
|
|||||||
*
|
*
|
||||||
* If the expectations do not match, then the locator will retry.
|
* If the expectations do not match, then the locator will retry.
|
||||||
*
|
*
|
||||||
* @internal
|
* @public
|
||||||
*/
|
*/
|
||||||
expect<S extends T>(predicate: Predicate<T, S>): Locator<S> {
|
filter<S extends T>(predicate: Predicate<T, S>): Locator<S> {
|
||||||
return new ExpectedLocator(this, predicate);
|
return new FilteredLocator(this, predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
click<ElementType extends Element>(
|
click<ElementType extends Element>(
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
export * from './Locator.js';
|
export * from './Locator.js';
|
||||||
export * from './NodeLocator.js';
|
export * from './NodeLocator.js';
|
||||||
export * from './ExpectedLocator.js';
|
export * from './FilteredLocator.js';
|
||||||
export * from './RaceLocator.js';
|
export * from './RaceLocator.js';
|
||||||
export * from './DelegatedLocator.js';
|
export * from './DelegatedLocator.js';
|
||||||
export * from './MappedLocator.js';
|
export * from './MappedLocator.js';
|
||||||
|
@ -587,7 +587,7 @@ describe('Locator', function () {
|
|||||||
await page.setContent(`<div>test</div>`);
|
await page.setContent(`<div>test</div>`);
|
||||||
const result = page
|
const result = page
|
||||||
.locator('::-p-text(test)')
|
.locator('::-p-text(test)')
|
||||||
.expect(element => {
|
.filter(element => {
|
||||||
return element.getAttribute('clickable') !== null;
|
return element.getAttribute('clickable') !== null;
|
||||||
})
|
})
|
||||||
.map(element => {
|
.map(element => {
|
||||||
@ -601,7 +601,7 @@ describe('Locator', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Locator.prototype.expect', () => {
|
describe('Locator.prototype.filter', () => {
|
||||||
it('should resolve as soon as the predicate matches', async () => {
|
it('should resolve as soon as the predicate matches', async () => {
|
||||||
const clock = sinon.useFakeTimers({
|
const clock = sinon.useFakeTimers({
|
||||||
shouldClearNativeTimers: true,
|
shouldClearNativeTimers: true,
|
||||||
@ -612,10 +612,10 @@ describe('Locator', function () {
|
|||||||
const result = page
|
const result = page
|
||||||
.locator('::-p-text(test)')
|
.locator('::-p-text(test)')
|
||||||
.setTimeout(5000)
|
.setTimeout(5000)
|
||||||
.expect(async element => {
|
.filter(async element => {
|
||||||
return element.getAttribute('clickable') === 'true';
|
return element.getAttribute('clickable') === 'true';
|
||||||
})
|
})
|
||||||
.expect(element => {
|
.filter(element => {
|
||||||
return element.getAttribute('clickable') === 'true';
|
return element.getAttribute('clickable') === 'true';
|
||||||
})
|
})
|
||||||
.hover();
|
.hover();
|
||||||
|
Loading…
Reference in New Issue
Block a user