evaluate<T> method

Future<T> evaluate<T>(
  1. @Language.new('js') String pageFunction, {
  2. List? args,
})

If the function passed to the Frame.evaluate returns a Promise, then Frame.evaluate would wait for the promise to resolve and return its value.

If the function passed to the Frame.evaluate returns a non-Serializable value, then Frame.evaluate resolves to null. DevTools Protocol also supports transferring some additional values that are not serializable by JSON: -0, NaN, Infinity, -Infinity, and bigint literals.

Passing arguments to pageFunction:

var result = await frame.evaluate<int>(
  '''x => {
          return Promise.resolve(8 * x);
        }''',
  args: [7],
);
print(result); // prints "56"

An expression can also be passed in instead of a function:

print(await frame.evaluate('1 + 2')); // prints "3"
var x = 10;
print(await frame.evaluate('1 + $x')); // prints "11"

ElementHandle instances can be passed as arguments to the Frame.evaluate:

var bodyHandle = await frame.$('body');
var html = await frame.evaluate('body => body.innerHTML', args: [bodyHandle]);
await bodyHandle.dispose();
print(html);

Parameters:

  • pageFunction Function to be evaluated in the page context
  • args Arguments to pass to pageFunction
  • Returns: Future which resolves to the return value of pageFunction

Implementation

Future<T> evaluate<T>(
  @Language('js') String pageFunction, {
  List<dynamic>? args,
}) {
  return _mainWorld.evaluate<T>(pageFunction, args: args);
}