【问题标题】:Restoring Firefox Session in Selenium在 Selenium 中恢复 Firefox 会话
【发布时间】:2016-06-25 06:19:24
【问题描述】:

我目前正在自动化一个网站并进行一项检查“记住我”选项功能的测试。 我的测试脚本登录,输入有效的用户名和密码,并在单击登录按钮之前选中记住我复选框。

为了测试此功能,我使用 pickle 将 cookie 保存到文件中,关闭浏览器然后重新打开浏览器(加载 cookie 文件)。

def closeWebsite(self, saveCookies=False):
    if saveCookies:
        pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb'))
    self.driver.close()

def openWebsite(self, loadCookies=False):
    desired_caps = {}
    desired_caps['browserName'] = 'firefox'
    profile = webdriver.FirefoxProfile(firefoxProfile)
    self.driver = webdriver.Firefox(profile)
    self.driver.get(appUrl)
    if loadCookies:
        for cookie in pickle.load(open('cookies.pkl', 'rb')):
            self.driver.add_cookie(cookie)

但是,当我这样做时,新的浏览器并没有登录。我知道每次你调用打开浏览器时都会创建一个新的会话,并且可以使用driver.session_id获取这个会话 ID 是否可以在 openWebsite 方法中加载驱动程序并指定 sessionID? 当我手动测试时,Remember Me 选项按预期工作。我只是无法理解 Selenium 如何处理这种情况。

【问题讨论】:

    标签: python session selenium cookies selenium-webdriver


    【解决方案1】:

    对于初学者,您在在添加 cookie 之前加载页面。尽管它们有可能在页面需要/查询它们之前到达,但这是不正确的,更不用说可靠了。

    但是,如果您尝试在任何页面加载之前设置 cookie,will get an error。

    解决办法好像是this:

    首先,您需要位于 cookie 有效的域中。如果您在开始交互之前尝试预设 cookie 一个网站并且您的主页很大/需要一段时间才能加载 另一种方法是在网站上找到一个较小的页面,[...]

    换句话说:

    1. 导航到您的主页,或与appUrl 位于同一域 上的小型入口页面(无需等到完全加载)。
    2. 添加您的 cookie。
    3. 加载appUrl。以后你应该没事了。

    【讨论】:

    • 我还没有设法让它工作。我试图加载一个较小的页面,但我的 cookie 似乎没有被记住。所以我无法完成 Rememer Me 选项的有效测试。
    • 您是否尝试过在导航到appUrl 之前创建它们,但在第一次请求入口页面之后(以便浏览器可以为您的域添加它们)?
    • 当你说请求一个入口页面时,你是指网站上任何可以快速加载的页面,例如。 404 页面?
    • 是的,就是这样。
    • @p_cos 你解决了这个问题吗?我在尝试设置 cookie 时遇到了类似的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-05-15
    • 2011-06-24
    • 2018-06-10
    • 1970-01-01
    • 2017-06-13
    • 2020-05-21
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多