private void DeleteCookieByPath(Cookie cookie)
            {
                Cookie toDelete = null;
                string path     = cookie.Path;

                if (path != null)
                {
                    string[]      segments    = cookie.Path.Split(new char[] { '/' });
                    StringBuilder currentPath = new StringBuilder();
                    foreach (string segment in segments)
                    {
                        if (string.IsNullOrEmpty(segment))
                        {
                            continue;
                        }

                        currentPath.Append("/");
                        currentPath.Append(segment);

                        toDelete = new NullPathCookie(cookie.Name, cookie.Value, cookie.Domain, currentPath.ToString(), DateTime.MinValue);

                        RecursivelyDeleteCookieByDomain(toDelete);
                    }
                }

                toDelete = new NullPathCookie(cookie.Name, cookie.Value, cookie.Domain, "/", DateTime.MinValue);
                RecursivelyDeleteCookieByDomain(toDelete);

                toDelete = new NullPathCookie(cookie.Name, cookie.Value, cookie.Domain, null, DateTime.MinValue);
                RecursivelyDeleteCookieByDomain(toDelete);
            }
            /// <summary>
            /// Delete a cookie in the browser that is the.
            /// </summary>
            /// <param name="cookie">An object that represents a copy of the cookie that needs to be deleted.</param>
            public void DeleteCookie(Cookie cookie)
            {
                ////Uri currentUri = new Uri(driver.Url);
                ////DateTime dateInPast = DateTime.MinValue;
                ////AddCookie(new Cookie(cookie.Name, cookie.Value, currentUri.Host, currentUri.PathAndQuery, dateInPast));
                if (cookie == null)
                {
                    throw new WebDriverException("Cookie to delete cannot be null");
                }

                string currentUrl = driver.Url;

                try
                {
                    Uri uri = new Uri(currentUrl);

                    Cookie toDelete = new NullPathCookie(cookie.Name, cookie.Value, uri.Host, uri.AbsolutePath, DateTime.MinValue);

                    DeleteCookieByPath(toDelete);
                }
                catch (UriFormatException e)
                {
                    throw new WebDriverException("Cannot delete cookie: " + e.Message);
                }
            }
            private void RecursivelyDeleteCookieByDomain(Cookie cookie)
            {
                AddCookie(cookie);

                int dotIndex = cookie.Domain.IndexOf('.');

                if (dotIndex == 0)
                {
                    string domain   = cookie.Domain.Substring(1);
                    Cookie toDelete = new NullPathCookie(cookie.Name, cookie.Value, domain, cookie.Path, DateTime.MinValue);
                    RecursivelyDeleteCookieByDomain(toDelete);
                }
                else if (dotIndex != -1)
                {
                    string domain   = cookie.Domain.Substring(dotIndex);
                    Cookie toDelete = new NullPathCookie(cookie.Name, cookie.Value, domain, cookie.Path, DateTime.MinValue);
                    RecursivelyDeleteCookieByDomain(toDelete);
                }
                else
                {
                    Cookie toDelete = new NullPathCookie(cookie.Name, cookie.Value, string.Empty, cookie.Path, DateTime.MinValue);
                    AddCookie(toDelete);
                }
            }
            private void RecursivelyDeleteCookieByDomain(Cookie cookie)
            {
                AddCookie(cookie);

                int dotIndex = cookie.Domain.IndexOf('.');
                if (dotIndex == 0)
                {
                    string domain = cookie.Domain.Substring(1);
                    Cookie toDelete = new NullPathCookie(cookie.Name, cookie.Value, domain, cookie.Path, DateTime.MinValue);
                    RecursivelyDeleteCookieByDomain(toDelete);
                }
                else if (dotIndex != -1)
                {
                    string domain = cookie.Domain.Substring(dotIndex);
                    Cookie toDelete = new NullPathCookie(cookie.Name, cookie.Value, domain, cookie.Path, DateTime.MinValue);
                    RecursivelyDeleteCookieByDomain(toDelete);
                }
                else
                {
                    Cookie toDelete = new NullPathCookie(cookie.Name, cookie.Value, string.Empty, cookie.Path, DateTime.MinValue);
                    AddCookie(toDelete);
                }
            }
            private void DeleteCookieByPath(Cookie cookie)
            {
                Cookie toDelete = null;
                string path = cookie.Path;

                if (path != null)
                {
                    string[] segments = cookie.Path.Split(new char[] { '/' });
                    StringBuilder currentPath = new StringBuilder();
                    foreach (string segment in segments)
                    {
                        if (string.IsNullOrEmpty(segment))
                        {
                            continue;
                        }

                        currentPath.Append("/");
                        currentPath.Append(segment);

                        toDelete = new NullPathCookie(cookie.Name, cookie.Value, cookie.Domain, currentPath.ToString(), DateTime.MinValue);

                        RecursivelyDeleteCookieByDomain(toDelete);
                    }
                }

                toDelete = new NullPathCookie(cookie.Name, cookie.Value, cookie.Domain, "/", DateTime.MinValue);
                RecursivelyDeleteCookieByDomain(toDelete);

                toDelete = new NullPathCookie(cookie.Name, cookie.Value, cookie.Domain, null, DateTime.MinValue);
                RecursivelyDeleteCookieByDomain(toDelete);
            }
            /// <summary>
            /// Delete a cookie in the browser that is the.
            /// </summary>
            /// <param name="cookie">An object that represents a copy of the cookie that needs to be deleted.</param>
            public void DeleteCookie(Cookie cookie)
            {
                ////Uri currentUri = new Uri(driver.Url);
                ////DateTime dateInPast = DateTime.MinValue;
                ////AddCookie(new Cookie(cookie.Name, cookie.Value, currentUri.Host, currentUri.PathAndQuery, dateInPast));
                if (cookie == null)
                {
                    throw new WebDriverException("Cookie to delete cannot be null");
                }

                string currentUrl = driver.Url;
                try
                {
                    Uri uri = new Uri(currentUrl);

                    Cookie toDelete = new NullPathCookie(cookie.Name, cookie.Value, uri.Host, uri.AbsolutePath, DateTime.MinValue);

                    DeleteCookieByPath(toDelete);
                }
                catch (UriFormatException e)
                {
                    throw new WebDriverException("Cannot delete cookie: " + e.Message);
                }
            }