菜单
文档breadcrumb arrow Grafana k6breadcrumb arrow JavaScript APIbreadcrumb arrow k6/browserbreadcrumb arrow BrowserContextbreadcrumb arrow waitForEvent(event[, optionsOrPredicate])
开源

等待事件触发并返回其值。如果设置了 predicate 函数,则会将事件值传递给 predicate 函数,predicate 函数必须返回 true,Promise 才会解决。

参数类型默认值描述
eventstringnull要等待的事件名称。目前仅支持 'page' 事件。
optionsOrPredicatefunction|objectnull可选。如果它是一个函数,则会将 'page' 事件数据传递给它,并且它必须返回 true 才能继续。
optionsOrPredicate.predicatefunctionnull可选。当 'page' 事件被触发时将调用此函数。事件数据将传递给它,并且它必须返回 true 才能继续。
optionsOrPredicate.timeoutnumber30000可选。最大等待时间(毫秒)。

返回值

类型描述
Promise<Page>当 page 事件被触发时,一个 Promise 会以一个 page 对象解决。

示例

当您希望在点击在新标签页中打开的链接后等待新页面打开时,此 API 非常有用。

JavaScript
import { browser } from 'k6/browser';

export const options = {
  scenarios: {
    ui: {
      executor: 'shared-iterations',
      options: {
        browser: {
          type: 'chromium',
        },
      },
    },
  },
};

export default async function () {
  const page = await browser.newPage();

  await page.goto('https://test.k6.io/');

  await page.keyboard.down('ControlOrMeta');

  // Open the link in a new tab with the help of the meta key.
  // Wait for the new page to be created.
  const browserContext = browser.context();
  const [newTab] = await Promise.all([
    browserContext.waitForEvent('page'),
    await page.locator('a[href="/my_messages.php"]').click(),
  ]);

  await page.keyboard.up('ControlOrMeta');

  // Wait for the new page (tab) to load.
  await newTab.waitForLoadState('load');

  // Take screenshots of each page.
  await page.screenshot({ path: `screenshot-page.png` });
  await newTab.screenshot({ path: `screenshot-newTab.png` });

  await newTab.close();
  await page.close();
}

这是一个使用 predicate 的示例

JavaScript
import { browser } from 'k6/browser';

export const options = {
  scenarios: {
    browser: {
      executor: 'shared-iterations',
      options: {
        browser: {
          type: 'chromium',
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();

  // Call waitForEvent with a predicate which will return true once at least
  // one page has been created.
  let counter = 0;
  const promise = await context.waitForEvent('page', {
    predicate: (page) => {
      if (++counter >= 1) {
        return true;
      }
      return false;
    },
  });

  // Now we create a page.
  const page = await context.newPage();

  // Wait for the predicate to pass.
  await promise;
  console.log('predicate passed');

  await page.close();
}