0

我有个问题。scriptEventClick 看不到 scriptGlobal 中的方法。我怎么知道 scriptGlobal 是在 JS 中注册的,以便我以后可以调用 EvaluateScriptAsPromiseAsync

    public Task<bool> GetResultAfterPageLoad(string pageUrl)
    {
        TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();

        EventHandler<LoadingStateChangedEventArgs> onPageLoaded = null;
        onPageLoaded = async (sender, args) =>
        {
            if (!args.IsLoading)
            {
                _browser.LoadingStateChanged -= onPageLoaded;
                // initialization script
                _browser.ExecuteScriptAsyncWhenPageLoaded(scriptGlobal);

                // script for click button
                JavascriptResponse responseClick = await _browser.EvaluateScriptAsPromiseAsync(scriptEventClick);

                tcs.SetResult(_result);
            }
        };

        _browser.LoadingStateChanged += onPageLoaded;
        _browser.Load(pageUrl);
        return tcs.Task;
    }

在哪里

   scriptGlobal = "async function eventClick(){}";
   scriptEventClick = "return eventClick();";
4

1 回答 1

0

这个解决方案有效。但我认为这是一个糟糕的答案。因为我不想在循环中使用延迟

    _browser.ExecuteScriptAsyncWhenPageLoaded(scriptGlobal);

    JavascriptResponse responseGlobal = null;
    do
    {
        responseGlobal = await _browser.EvaluateScriptAsync("eventClick");
        await Task.Delay(100);
    }
    while (responseGlobal.Result == null);

    JavascriptResponse responseClick = await _browser.EvaluateScriptAsPromiseAsync(scriptEventClick);
于 2021-06-14T22:38:11.520 回答