static async ValueTask VerifyNavigationAsync(BlazorClient client) { await client.ExpectRenderBatch(() => client.NavigateAsync($"{ServerUrl}/counter")); client.Hive.TryFindElementById("counter", out var counter); Debug.Assert(counter != null, "We must have navigated to counter."); }
static async Task Main(string[] args) { var client = new BlazorClient(); client.JSInterop += async(args) => { if (args.Identifier == "Blazor._internal.navigationManager.navigateTo") { var jsonDocument = JsonDocument.Parse(args.ArgsJson); var array = jsonDocument.RootElement; var uri = array[0].GetString(); if (array[1].GetBoolean()) { throw new NotSupportedException("Force load is not supported."); } await client.NavigateAsync(ServerUrl + "/" + uri); } }; await client.ConnectAsync(new Uri(ServerUrl)); await Navigate(client); await Clicks(client); await NavigateOnClick(client); await TypeAhead(client); Console.WriteLine("Done"); }
static async Task Clicks(BlazorClient client) { var batch = await client.ExpectRenderBatch(() => client.NavigateAsync(ServerUrl + "/home")); if (!client.Hive.TryFindElementById("changeState", out var changeState)) { throw new InvalidOperationException($"Expected to have navigated to the home page."); } client.Hive.TryFindElementById("state", out var state); await changeState.ClickAsync(client.HubConnection); await client.PrepareForNextBatch(null); if (state.Attributes["data-state"].ToString() == "Clicked") { Console.WriteLine("State changed to clicked."); } else { throw new InvalidOperationException("State was not 'Clicked'."); } await client.ExpectRenderBatch(() => changeState.DoubleClickAsync(client.HubConnection)); if (state.Attributes["data-state"].ToString() == "DoubleClicked") { Console.WriteLine("State changed to dblclicked."); } else { throw new InvalidOperationException("State was not 'DoubleClicked'."); } }
static async Task NavigateOnClick(BlazorClient client) { var batch = await client.ExpectRenderBatch(() => client.NavigateAsync(ServerUrl + "/home")); if (!client.Hive.TryFindElementById("navigateOnClick", out var navigateOnClick)) { throw new InvalidOperationException($"Expected to have navigated to the home page."); } await navigateOnClick.ClickAsync(client.HubConnection); // Wait for one or more renders that causes fetchdata to have been updated. await client.ExistsAsync("fetchdata"); Console.WriteLine("Completed navigation on click scenarios"); }
static async Task Navigate(BlazorClient client) { var links = new[] { "counter", "fetchdata", "home" }; for (var i = 0; i < 5; i++) { var link = links[i % links.Length]; var batch = await client.ExpectRenderBatch(() => client.NavigateAsync(ServerUrl + "/" + link)); if (!client.Hive.TryFindElementById(link, out _)) { throw new InvalidOperationException($"Expected to have navigated to {link}."); } Console.WriteLine($"Navigated to {link}."); await Task.Delay(50); } Console.WriteLine("Completed navigation scenarios"); }