## 事象
表題の通り。
## 原因
[[Playwright]]は通常同一のタブに対してテストを続けるから。
## 解決方法
`context.waitForEvent(page)`のイベント結果から新しいページを受け取り、以後はそれを使う。
以下は汎用Pageクラスに処理を隠ぺいした一例。
```ts
export abstract class AbstractPage {
constructor(public readonly page: Page) {}
async aタグの_blankは無視してクリック<T, A>(
nextPageClass: ConstructorWithArg<T, Page>,
locator: Locator
) {
const pagePromise = this.page.context().waitForEvent("page");
await locator.click();
const newPage = await pagePromise;
return new nextPageClass(newPage);
}
}
```
こんな感じで呼び出す。
```ts
// class CurrentPage extends AbstractPage
// class NextPage extends AbstractPage
// currentPage: CurrentPage
// locator: クリックするリンクのaタグ (target=_blank)
const nextPage = await currentPage.aタグの_blankは無視してクリック(NextPage, locator)
```
## 参考
- [Playwrightの使い方メモ \- 新しいことにはウェルカム](https://www.kwbtblog.com/entry/2023/02/10/091552)