豚吐露@wiki

存在するDOMをclickするとTargetClosedが発生する

最終更新:

ohden

- view
管理者のみ編集可

存在するDOMをclickするとランダムに"Error: locator.click: Target closed"が発生する

Playwright 1.35.1

まだ何もわかって無い。

現象

存在するDOMに対してselectorを作り、selector.clickを行う。現状、3割くらいの確率で"Error: locator.click: Target closed"が発生。test ngとなる。
再現性が100%じゃないのが辛い。

対象のDOMが、svgのrectなのが原因?selectorにnth()使ってるのが原因?d3.jsでon clickを設定してるせい?
原因も解決方法も何も分かって無いので、分かり次第記載していく。
Playwrightのバグやヘッドレスブラウザのバグって可能性もあるんかなぁ...

対策

根本原因は分かってないが...とりあえず、以下を参考にすると良さそう。
https://playwright.dev/docs/input#forcing-the-click

ココに書いてあることが起きとるんかは、正直分からん。
が、確かにclickしようとしてできんところはsvgの要素が色々複雑に重なっとる所ではある...

Sometimes, apps use non-trivial logic where hovering the element overlays it with another element that intercepts the click.
This behavior is indistinguishable from a bug where element gets covered and the click is dispatched elsewhere.
If you know this is taking place, you can bypass the actionability checks and force the click.
まとめると、DOMが重なっとるとclick eventが思った通りのDOMとならないバグがあると。
で、Playwrightじゃあ、バグなんかそうでないんかの区別がつかんからclick止めることがある。

どうしてもclickしたかったら、以下の強制clickを使ってね。と...
  • 強制click。
await page.getByRole('button').click({ force: true });

実動作と異なるが、強制的にclick eventをdispatchさせることもできるみたい。
  • 対象にclick eventを発生させる。
await page.getByRole('button').dispatchEvent('click');


更新日: 2023年08月22日 (火) 11時14分54秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
ウィキ募集バナー