【问题标题】:Selenium Webdriver not respecting cookies or cached imagesSelenium Webdriver 不尊重 cookie 或缓存图像
【发布时间】:2012-07-05 22:08:07
【问题描述】:

我正在使用 Selenium (2.24) 生成单元测试(用于 Visual Studio 单元测试框架)。在为 FireFox 使用 C# WebDriver 时,驱动程序启动的浏览器似乎没有通过 javascript 找到我的网站 cookie(我的站点中包含一个 javascript 文件,用于查找 cookie 并让我知道它们是否被发现)。此外,它不使用浏览器图像缓存,并且总是从服务器请求新图像。当我从“正常”(不是由 Selenium 启动的)FireFox 运行我的网站时,不会发生这种行为。

奇怪的是,在我的单元测试中调用以下代码确实会返回我的 cookie(我的 JavaScript 无法找到它)

driver.Manage().Cookies.GetCookieNamed("MyCookie");

如何配置驱动程序以尊重我的 cookie 并使用浏览器图像缓存?此功能是测试我的网站的关键。

【问题讨论】:

    标签: c# selenium webdriver mstest


    【解决方案1】:

    默认情况下,FirefoxDriver 会在每次启动 Firefox 时创建一个新的匿名配置文件。如果您希望它使用现有的配置文件,您需要告诉它。

    在 Java 中你可以这样做:

    ProfilesIni allProfiles = new ProfilesIni();
    FirefoxProfile profile = allProfiles.getProfile("MyProfile");
    WebDriver driver = new FirefoxDriver(profile);
    

    我假设 C# 中有类似的东西

    【讨论】:

    • 好的,这在 C# 驱动程序中几乎相同,除了它的 FirefoxProfileManager 而不是 ProfilesIni。谢谢你的提示。这适用于 cookie,但它似乎仍然没有使用浏览器缓存来存储图像。我错过了什么?
    • 恐怕不知道缓存。您可以尝试手动启动 Firefox,然后通过 webdriver.firefox.useExisting 属性将 WebDriver 附加到此。 code.google.com/p/selenium/wiki/FirefoxDriver 我最好指出不建议将其用于生产。
    • 你有幸让webdriver.firefox.useExisting 工作吗?它似乎没有做任何事情。如果可能,请提供它的使用源代码sn-p。
    • 这个答案确实帮助我解决了重复使用 cookie、图像缓存不起作用但标记为已回答的问题,因为我认为这是 Selenium 中的一个错误。
    【解决方案2】:

    对于 cookie:如果 cookie 被标记为 "HTTP Only" 页面上的 JavaScript 将无法看到它。因此,任何在页面上使用 JavaScript 执行的代码都不会看到这个特定的 cookie。

    您可以通过使用一些 HTTP 调试器(即 Fiddler)来确认它是否使用 HttpOnly 属性设置了 cookie。您还可以通过开发工具检查在页面上运行脚本或在地址栏中输入javascript:alert(...)是否可以看到cookie(document.cookie

    【讨论】:

    • Cookie 不仅是 HTTP,它们还可以通过 Selenium WebDriver 之外的 javascript 正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2013-10-01
    • 2016-04-26
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多