示例#1
0
        public async Task ShouldBeAbleToReconnectToADisconnectedBrowser()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            await using var browser = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var context = await browser.NewContextAsync();

            var page = await context.NewPageAsync();

            await page.GoToAsync(TestConstants.EmptyPage);

            await browser.CloseAsync();

            await using var remote = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            context = await remote.NewContextAsync();

            page = await context.NewPageAsync();

            await page.GoToAsync(TestConstants.EmptyPage);

            await remote.CloseAsync();

            await browserServer.CloseAsync();
        }
        public async Task ShouldFireCloseEvent()
        {
            var tcs = new TaskCompletionSource <bool>();

            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            browserServer.Closed += (sender, e) => tcs.TrySetResult(true);
            await Task.WhenAll(tcs.Task, browserServer.CloseAsync());
        }
        public async Task ShouldSetTheBrowserConnectedState()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            var remote = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            Assert.True(remote.IsConnected);
            await remote.CloseAsync();

            Assert.False(remote.IsConnected);
        }
        public async Task ShouldThrowIfUsedAfterDisconnect()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            var remote = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var page = await remote.NewPageAsync();

            await remote.CloseAsync();

            var exception = await Assert.ThrowsAnyAsync <PlaywrightSharpException>(() => page.EvaluateAsync("1 + 1"));

            Assert.Contains("has been closed", exception.Message);
        }
        public async Task ShouldFireDisconnectedWhenClosingTheServer()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            await using var browser = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var disconnectedTcs = new TaskCompletionSource <bool>();
            var closedTcs       = new TaskCompletionSource <bool>();

            browser.Disconnected += (server, e) => disconnectedTcs.TrySetResult(true);
            browserServer.Closed += (server, e) => closedTcs.TrySetResult(true);
            _ = browserServer.KillAsync();

            await Task.WhenAll(disconnectedTcs.Task, closedTcs.Task).WithTimeout();
        }
        public async Task ShouldEmitCloseEventsOnPagesAndContexts()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            var remote = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var context = await remote.NewContextAsync();

            var page = await context.NewPageAsync();

            var tcs = new TaskCompletionSource <bool>();

            page.Closed += (sender, e) => tcs.TrySetResult(true);

            await Task.WhenAll(remote.CloseAsync(), tcs.Task);
        }
        public async Task ShouldWork()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            await using var browser = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var browserContext = await browser.NewContextAsync();

            Assert.Empty(browserContext.Pages);
            Assert.NotEmpty(browserServer.WSEndpoint);
            var page = await browserContext.NewPageAsync();

            Assert.Equal(121, await page.EvaluateAsync <int>("11 * 11"));
            await page.CloseAsync();

            await browser.CloseAsync();

            await browserServer.CloseAsync();
        }
        public async Task ShouldFireClosedEventDuringKill()
        {
            var order = new List <string>();

            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            var closedTcs = new TaskCompletionSource <bool>();

            browserServer.Closed += (server, e) =>
            {
                order.Add("closed");
                closedTcs.TrySetResult(true);
            };

            await Task.WhenAll(
                browserServer.KillAsync().ContinueWith(t => order.Add("killed")),
                closedTcs.Task);

            Assert.Equal(new[] { "closed", "killed" }, order.ToArray());
        }
        public async Task ShouldRejectWaitForSelectorWhenBrowserCloses()
        {
            Server.SetRoute("/empty.html", context => Task.Delay(10000));

            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            var remote = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var page = await remote.NewPageAsync();

            var watchdog = page.WaitForSelectorAsync("div", new WaitForSelectorOptions {
                State = WaitForState.Attached, Timeout = 60000
            });

            await page.WaitForSelectorAsync("body", new WaitForSelectorOptions { State = WaitForState.Attached });

            await remote.CloseAsync();

            await Assert.ThrowsAsync <TargetClosedException>(() => watchdog);
        }
示例#10
0
        public async Task ShouldRejectNavigationWhenBrowserCloses()
        {
            Server.SetRoute("/one-style.css", context => Task.Delay(10000));

            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            var remote = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var page = await remote.NewPageAsync();

            var navigationTask = page.GoToAsync(TestConstants.ServerUrl + "/one-style.html", new GoToOptions
            {
                Timeout = 60000
            });
            await Server.WaitForRequest("/one-style.css");

            await remote.CloseAsync();

            await Assert.ThrowsAsync <NavigationException>(() => navigationTask);
        }
示例#11
0
        public async Task ShouldThrowWhenUsedAfterIsConnectedReturnsFalse()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            var remote = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var page = await remote.NewPageAsync();

            var disconnectedTask = new TaskCompletionSource <bool>();

            remote.Disconnected += (sender, e) => disconnectedTask.TrySetResult(true);

            await Task.WhenAll(browserServer.CloseAsync(), disconnectedTask.Task);

            Assert.False(remote.IsConnected);

            var exception = await Assert.ThrowsAnyAsync <PlaywrightSharpException>(() => page.EvaluateAsync("1 + 1"));

            Assert.Contains("has been closed", exception.Message);
        }
示例#12
0
        public async Task ShouldTerminateNetworkWaiters()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            await using var remote = await BrowserType.ConnectAsync(new ConnectOptions { WSEndpoint = browserServer.WSEndpoint });

            var newPage = await remote.NewPageAsync();

            var requestTask  = newPage.WaitForRequestAsync(TestConstants.EmptyPage);
            var responseTask = newPage.WaitForResponseAsync(TestConstants.EmptyPage);

            await browserServer.CloseAsync();

            var exception = await Assert.ThrowsAsync <TargetClosedException>(() => requestTask);

            Assert.Contains("Page closed", exception.Message);
            Assert.DoesNotContain("Timeout", exception.Message);

            exception = await Assert.ThrowsAsync <TargetClosedException>(() => responseTask);

            Assert.Contains("Page closed", exception.Message);
            Assert.DoesNotContain("Timeout", exception.Message);
        }
        public async Task ShouldReturnChildProcessInstance()
        {
            await using var browserServer = await BrowserType.LaunchServerAsync(TestConstants.GetDefaultBrowserOptions());

            Assert.True(browserServer.ProcessId > 0);
        }