在Selenium中恢复Firefox会话

时间:2016-03-10 11:59:50

标签: python session selenium cookies selenium-webdriver

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

要测试此功能,我使用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? 当我手动测试时,“记住我”选项按预期工作。我很难理解Selenium如何处理这种情况。

1 个答案:

答案 0 :(得分:0)

对于初学者,您在添加Cookie之前加载页面。虽然在页面需要/查询之前有潜在到达,但这不正确,更不用说可靠了。

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

解决方案似乎是this

  

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

换句话说:

  1. 导航到您的主页,或与appUrl相同的上的小型参赛页面(无需等到完全加载)。
  2. 添加Cookie。
  3. 加载appUrl。从那以后你应该没事。