## 事象 表題の通り。 ## 原因 [[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)