【发布时间】:2016-05-11 09:26:19
【问题描述】:
在手动测试用例中,我试图在 Selenium 中使用 C# 自动化,它说:“登录并激活复选框‘记住我’,关闭浏览器,打开浏览器,检查用户是否仍然登录。 "
手动执行,这当然是成功的。使用 Chrome 中的 Selenium,我总是会在会话之间丢失 cookie。
到目前为止我尝试了什么:
public static void RefreshDriver(TestParams testParams)
{
var cookies = testParams.Target.Driver.Manage().Cookies.AllCookies;
var url = new Uri(testParams.Target.Driver.Url);
testParams.Target.Driver.Quit();
testParams.Target = testParams.Target.Clone(); // creates new ChromeDriver()
string temp = url.GetLeftPart(UriPartial.Authority);
testParams.Target.Driver.Navigate().GoToUrl(temp);
foreach (Cookie cookie in cookies)
{
testParams.Target.Driver.Manage().Cookies.AddCookie(cookie);
}
testParams.Target.Driver.Navigate().GoToUrl(url);
}
这就是我创建 ChromeDriver 的方式:
private ChromeDriver _CreateChromeDriver(string httpProxy)
{
var options = new ChromeOptions();
string tempDir = @"C:\Users\Kimmy\Documents\MyUserDataDir";
options.AddArgument("user-data-dir=" + tempDir);
if (!string.IsNullOrEmpty(httpProxy))
{
options.Proxy = new Proxy {HttpProxy = httpProxy};
}
return new ChromeDriver(options);
}
当我执行我的测试用例并到达带有RefreshDriver() 的部分时,首先我的用户再次登录。但是,当我开始将产品添加到购物篮时,我的用户突然不再登录了。
有没有办法告诉 Chrome 跨会话保留 cookie,而无需手动保存和恢复 cookie?
【问题讨论】:
-
你能告诉我们cookies是什么样的吗?实际上它们应该属于浏览器,WebDriver 只是您将它们传递给/从浏览器传递的机制。你确定你没有任何自动清除它们的规则/标志吗?
标签: c# selenium cookies selenium-webdriver selenium-chromedriver