等待事件触发并返回其值。如果设置了 predicate 函数,则会将事件值传递给 predicate 函数,predicate 函数必须返回 true,Promise 才会解决。
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
event | string | null | 要等待的事件名称。目前仅支持 'page' 事件。 |
optionsOrPredicate | function|object | null | 可选。如果它是一个函数,则会将 'page' 事件数据传递给它,并且它必须返回 true 才能继续。 |
optionsOrPredicate.predicate | function | null | 可选。当 'page' 事件被触发时将调用此函数。事件数据将传递给它,并且它必须返回 true 才能继续。 |
optionsOrPredicate.timeout | number | 30000 | 可选。最大等待时间(毫秒)。 |
返回值
类型 | 描述 |
---|---|
Promise<Page> | 当 page 事件被触发时,一个 Promise 会以一个 page 对象解决。 |
示例
当您希望在点击在新标签页中打开的链接后等待新页面打开时,此 API 非常有用。
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 的示例
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();
}