public void AssertGetThenSubmit()
            {
                var search = Guid.NewGuid().ToString();

                using (var waiter = new WebBrowserWaiter())
                {
                    waiter.Await(
                        p => p.Navigate(uri + "search"),
                        p => {
                            // ReSharper disable PossibleNullReferenceException
                            p.Document.All["search"].SetAttribute("value", search);
                            p.Document.All.Cast<HtmlElement>().First(q => q.TagName == "FORM").InvokeMember("Submit");
                            // ReSharper restore PossibleNullReferenceException
                        }
                    );

                    var text = waiter.Await(
                        p => p.DocumentText
                    );

                    Assert.IsTrue(
                        text.Contains(search)
                    );
                }
            }
            public void AssertGetThenSubmit()
            {
                var search = Guid.NewGuid().ToString();

                using (var waiter = new WebBrowserWaiter())
                {
                    waiter.Await(
                        p => p.Navigate(uri + "search"),
                        p => {
                        // ReSharper disable PossibleNullReferenceException
                        p.Document.All["search"].SetAttribute("value", search);
                        p.Document.All.Cast <HtmlElement>().First(q => q.TagName == "FORM").InvokeMember("Submit");
                        // ReSharper restore PossibleNullReferenceException
                    }
                        );

                    var text = waiter.Await(
                        p => p.DocumentText
                        );

                    Assert.IsTrue(
                        text.Contains(search)
                        );
                }
            }
            public void AssertRedirectFollowed()
            {
                using (var waiter = new WebBrowserWaiter())
                {
                    var url = waiter.Await(
                        p => { p.Navigate(uri + "redirect"); return(null); },
                        p => p.Url.ToString()
                        ).Last();

                    Assert.AreEqual(uri + "landing", url);
                }
            }
            public void AssertNavigate()
            {
                using (var waiter = new WebBrowserWaiter())
                {
                    string text = null;

                    waiter.Await(
                        p => p.Navigate(uri + "greet/World"),
                        p => text = p.DocumentText
                        );

                    Assert.IsTrue(
                        text.Contains("Hello World")
                        );
                }
            }
            public void CookieTest()
            {
                using (var waiter = new WebBrowserWaiter())
                {
                    var cookie = Guid.NewGuid().ToString();

                    waiter.Await(
                        p => p.Navigate(uri + "cookies"),
                        p => {
                        var function =
                            @"(function() {{
                                    document.cookie = 'cookie={0}; expires={1:R}; path=/';
                                    document.getElementsByTagName('form')[0].submit();
                                }})();";

                        function = string.Format(
                            function,
                            cookie,
                            DateTime.UtcNow.AddHours(1)
                            );

                        // ReSharper disable PossibleNullReferenceException
                        var head     = p.Document.GetElementsByTagName("head")[0];
                        var script   = p.Document.CreateElement("script");
                        var element  = script.DomElement as dynamic;
                        element.text = function;
                        head.AppendChild(script);
                        // ReSharper restore PossibleNullReferenceException
                    }
                        );

                    var text = waiter.Await(
                        p => p.DocumentText
                        );

                    Assert.IsTrue(
                        text.Contains(cookie)
                        );
                }
            }
            public void CookieTest()
            {
                using (var waiter = new WebBrowserWaiter())
                {
                    var cookie = Guid.NewGuid().ToString();

                    waiter.Await(
                        p => p.Navigate(uri + "cookies"),
                        p => {
                            var function =
                                @"(function() {{
                                    document.cookie = 'cookie={0}; expires={1:R}; path=/';
                                    document.getElementsByTagName('form')[0].submit();
                                }})();";

                            function = string.Format(
                                function,
                                cookie,
                                DateTime.UtcNow.AddHours(1)
                            );

                            // ReSharper disable PossibleNullReferenceException
                            var head = p.Document.GetElementsByTagName("head")[0];
                            var script = p.Document.CreateElement("script");
                            var element = script.DomElement as dynamic;
                            element.text = function;
                            head.AppendChild(script);
                            // ReSharper restore PossibleNullReferenceException
                        }
                    );

                    var text = waiter.Await(
                        p => p.DocumentText
                    );

                    Assert.IsTrue(
                        text.Contains(cookie)
                    );
                }
            }
            public void AssertRedirectFollowed()
            {
                using (var waiter = new WebBrowserWaiter())
                {
                    var url = waiter.Await(
                        p => { p.Navigate(uri + "redirect"); return null; },
                        p => p.Url.ToString()
                    ).Last();

                    Assert.AreEqual(uri + "landing", url);
                }
            }
            public void AssertNavigate()
            {
                using (var waiter = new WebBrowserWaiter())
                {
                    string text = null;

                    waiter.Await(
                        p => p.Navigate(uri + "greet/World"),
                        p => text = p.DocumentText
                    );

                    Assert.IsTrue(
                        text.Contains("Hello World")
                    );
                }
            }