Exemple #1
0
        internal async Task <IResponse> WaitForNavigationAsync(
            string urlString,
            Regex urlRegex,
            Func <string, bool> urlFunc,
            WaitUntilState waitUntil,
            float?timeout)
        {
            waitUntil = waitUntil.EnsureDefaultValue(WaitUntilState.Load);
            var    waiter = SetupNavigationWaiter(timeout);
            string toUrl  = !string.IsNullOrEmpty(urlString) ? $" to \"{urlString}\"" : string.Empty;

            waiter.Log($"waiting for navigation{toUrl} until \"{waitUntil}\"");

            var navigatedEvent = await waiter.WaitForEventAsync <FrameNavigatedEventArgs>(
                this,
                "Navigated",
                e =>
            {
                // Any failed navigation results in a rejection.
                if (e.Error != null)
                {
                    return(true);
                }

                waiter.Log($"  navigated to \"{e.Url}\"");
                return(UrlMatches(e.Url, urlString, urlRegex, urlFunc));
            }).ConfigureAwait(false);

            if (navigatedEvent.Error != null)
            {
                var ex  = new NavigationException(navigatedEvent.Error);
                var tcs = new TaskCompletionSource <bool>();
                tcs.TrySetException(ex);
                await waiter.WaitForPromiseAsync(tcs.Task).ConfigureAwait(false);
            }

            if (!_loadStates.Select(s => s.ToValueString()).Contains(waitUntil.ToValueString()))
            {
                await waiter.WaitForEventAsync <LoadState>(
                    this,
                    "LoadState",
                    e =>
                {
                    waiter.Log($"  \"{e}\" event fired");
                    return(e.ToValueString() == waitUntil.ToValueString());
                }).ConfigureAwait(false);
            }

            var request  = navigatedEvent.NewDocument?.Request?.Object;
            var response = request != null
                ? await waiter.WaitForPromiseAsync(request.FinalRequest.ResponseAsync()).ConfigureAwait(false)
                : null;

            waiter.Dispose();
            return(response);
        }
Exemple #2
0
        internal Task SetContentAsync(string html, float?timeout, WaitUntilState waitUntil, bool isPage)
        {
            var args = new Dictionary <string, object>
            {
                ["html"]      = html,
                ["isPage"]    = isPage,
                ["waitUntil"] = waitUntil,
            };

            if (timeout != null)
            {
                args["timeout"] = timeout;
            }

            return(Connection.SendMessageToServerAsync(Guid, "setContent", args));
        }
 internal static LoadState ToLoadState(this WaitUntilState waitUntilState)
 => waitUntilState switch
 {
Exemple #4
0
        private Task WaitForURLAsync(string urlString, Regex urlRegex, Func <string, bool> urlFunc, float?timeout, WaitUntilState waitUntil)
        {
            if (UrlMatches(Url, urlString, urlRegex, urlFunc))
            {
                return(WaitForLoadStateAsync(waitUntil.EnsureDefaultValue(WaitUntilState.Load).ToLoadState(), timeout));
            }

            return(WaitForNavigationAsync(urlString, urlRegex, urlFunc, waitUntil, timeout));
        }
Exemple #5
0
 internal Task SetContentAsync(bool isPageCall, string html, WaitUntilState waitUntil, float?timeout)
 => _channel.SetContentAsync(html, timeout, waitUntil, isPageCall);
Exemple #6
0
 /// <inheritdoc />
 public Task WaitForURLAsync(Func <string, bool> urlFunc, float?timeout = default, WaitUntilState waitUntil = default)
 => WaitForURLAsync(null, null, urlFunc, timeout, waitUntil);
Exemple #7
0
 /// <inheritdoc />
 public Task WaitForURLAsync(string urlString, float?timeout = default, WaitUntilState waitUntil = default)
 => WaitForURLAsync(urlString, null, null, timeout, waitUntil);
Exemple #8
0
 /// <inheritdoc />
 public Task WaitForURLAsync(Regex urlRegex, float?timeout = default, WaitUntilState waitUntil = default)
 => WaitForURLAsync(null, urlRegex, null, timeout, waitUntil);
Exemple #9
0
 /// <inheritdoc />
 public Task <IResponse> WaitForNavigationAsync(Func <string, bool> urlFunc, WaitUntilState waitUntil, float?timeout)
 => WaitForNavigationAsync(null, null, urlFunc, waitUntil, timeout);
Exemple #10
0
 /// <inheritdoc />
 public Task <IResponse> WaitForNavigationAsync(Regex urlRegex, WaitUntilState waitUntil, float?timeout)
 => WaitForNavigationAsync(null, urlRegex, null, waitUntil, timeout);
Exemple #11
0
 /// <inheritdoc />
 public Task <IResponse> WaitForNavigationAsync(string urlString, WaitUntilState waitUntil = default, float?timeout = default)
 => WaitForNavigationAsync(urlString, null, null, waitUntil, timeout);
Exemple #12
0
 /// <inheritdoc />
 public Task SetContentAsync(string html, float?timeout, WaitUntilState waitUntil)
 => SetContentAsync(false, html, waitUntil.EnsureDefaultValue(WaitUntilState.Load), timeout);
Exemple #13
0
 /// <inheritdoc />
 public Task <IResponse> GoToAsync(string url, WaitUntilState waitUntil, float?timeout, string referer)
 => GoToAsync(false, url, waitUntil.EnsureDefaultValue(WaitUntilState.Load), referer, timeout);