0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Playwright.NETのサンプルがアテにならなくて泣きそう

0
Last updated at Posted at 2026-03-20

最近業務で使用するWebアプリの操作を自動化すべくVisualStudioからPlaywrightをNuGet。
…はいいのだが。この子、ググって出てくる関数がことごとくNode.js版。(C#とか.NETを付けない自分が悪い)

OK/Cancelダイアログを出すのにGemini曰く

// 1. ダイアログが発生するアクションを実行する Task を作成(すぐには await しない)
var dialogTask = page.WaitForDialogAsync();

// 2. ダイアログを発生させるクリックアクションを実行
await page.ClickAsync("button#confirm");

// 3. ダイアログのイベントを待機し、処理する
var dialog = await dialogTask;
Console.WriteLine(dialog.Message);
await dialog.AcceptAsync(); // または await dialog.DismissAsync();

だそうだが、playwright.devではそんなものかけらも存在しない。

一度だけ応答すれば良いのであればOnceを使えと言われるのだが…これも無い。

しょうがないから全部OKさせるか?

// 1. ダイアログイベントのハンドラを登録
page.Dialog += async (_, dialog) =>
{
    // ダイアログのメッセージを確認(オプション)
    System.Console.WriteLine(dialog.Message);

    // ダイアログを確定(OK)する
    await dialog.AcceptAsync();
    
    // キャンセルしたい場合は以下を使用
    // await dialog.DismissAsync();
};

…と、諦めきれずいろいろなワードでググったらこんな回答が来た。
ハンドラの変数作って自分をデクリメントさせる…そういえばそんな方法あったけど、こんな簡単にいくか?

// 1. ダイアログが表示された時の処理を定義
EventHandler<IDialog> handler = null;
handler = async (sender, dialog) =>
{
    // OK(承諾)する
    await dialog.AcceptAsync();
    
    // 【重要】一度だけ実行するためにハンドラーを解除
    page.Dialog -= handler;
};

// 2. イベントを登録
page.Dialog += handler;

↑をconfirm→aleat→confirmを連続で出すhtmlで実行させてみる。

<script>
    function clicked()
    {
        var b = confirm("hoge");
        document.getElementById("pppp").innerText = b;
        alert("piyo");
        b = confirm("fuga");
        document.getElementById("qqqq").innerText = b;
    }
</script>
<button id="btn" onclick="clicked()">こんふぁーむ</button>
<p id="pppp"></p>
<p id="qqqq"></p>

image.png
いけた。

ということで、Geminiさんは関数でっち上げないでください。(無理なのわかってるけど)

余談。
確認のために自宅PCでプログラム書いて実行させてみた時の例外。

╔════════════════════════════════════════════════════════════╗
║ Looks like Playwright was just installed or updated.       ║
║ Please run the following command to download new browsers: ║
║                                                            ║
║     pwsh bin/Debug/netX/playwright.ps1 install             ║
║                                                            ║
║ <3 Playwright Team                                         ║
╚════════════════════════════════════════════════════════════╝

pwsh…ごん、お前PowerShell 7.x必須やったんか…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?