从cookie容器

时间:2017-04-24 15:51:49

标签: c# selenium httpwebrequest

我有一个数据网格视图,可以收集成功的http请求。我想要发生的是当点击数据网格视图中的按钮时,它应该在selenium中打开一个浏览器,其中包含来自该特定http请求的cookie。 我已经有了一些。

以下是数据网格视图的屏幕截图:https://imgur.com/a/5hs9l

这是我到目前为止所做的:

CookieContainer cookiejar = new CookieContainer();
//Http request goes here
httpWebRequest1.CookieContainer = cookiejar;

这用于将商品添加到购物车并将Cookie保存在Cookie容器中。

这是结帐按钮的作用:

var driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.adidas.co.uk/on/demandware.store/Sites-adidas-GB-Site/en_GB/Cart-Show");

foreach (System.Net.Cookie cook in response.Cookies)
{                    
driver.Manage().Cookies.AddCookie(new OpenQA.Selenium.Cookie(cook.Name, cook.Value));
}

我想要发生的是每个数据网格视图行都有一个不同的cookie容器,当点击结帐时,它会使用该cookie容器打开浏览器。 目前其中一个问题是我无法制作一个可以使用按钮添加cookie的工作公共cookie容器。 第二件事是我不知道如何为每一行制作一个单独的容器。

即使您不了解整个过程,也欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

您无法遍历 cookie 集合。你必须使用反射。

Hashtable table = (Hashtable)response.Cookies.GetType().InvokeMember(
    "m_domainTable",
    BindingFlags.NonPublic |
    BindingFlags.GetField |
    BindingFlags.Instance,
    null,
    cookies,
    new object[] { }
);

                foreach (var hostname in table.Keys)
                {
                    Uri uri = new Uri(string.Format("https://{0}/", hostname));

                    foreach (System.Net.Cookie netcookie in cookies.GetCookies(uri))
                    {
                        OpenQA.Selenium.Cookie cookie = new OpenQA.Selenium.Cookie(netcookie.Name, netcookie.Value, netcookie.Domain,netcookie.Path, netcookie.Expires);
                        _currentDriver.Manage().Cookies.AddCookie(cookie);

                    }
                }