Как запретить Django переопределять файл cookie sessionid?

Я пытаюсь иметь 2 окна браузера с одним и тем же сеансом в тесте. Обратите внимание, что у каждого браузера свой профиль firefox из-за ограничений селена.

Тест (вы можете попробовать его, если у вас есть тестовый/тестовый персонал):

import time

from django.test import LiveServerTestCase
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.firefox.webdriver import WebDriver
from selenium.common.exceptions import NoSuchElementException

class ScriptTestCase(LiveServerTestCase):
    def do_admin_login(self, username, password, browser):
        browser.get('%s%s' % (self.live_server_url, '/admin/'))
        username_input = browser.find_element_by_name("username")
        username_input.send_keys(username)
        password_input = browser.find_element_by_name("password")
        password_input.send_keys(password)
        browser.find_element_by_xpath('//input[@value="Log in"]').click()

    def test_double_window_inactivity(self):
        browser0 = WebDriver()
        self.do_admin_login('test', 'test', browser0)
        cookie = browser0.get_cookie('sessionid')
        cookies = {'name': 'sessionid', 'value': cookie['value']}

        browser1 = WebDriver()
        browser1.add_cookie(cookies)
        print 1, browser0.get_cookie('sessionid')['value']
        print 2, browser1.get_cookie('sessionid')['value']
        browser1.get('%s%s' % (self.live_server_url, '/admin/'))
        print 3, browser0.get_cookie('sessionid')['value']
        print 4, browser1.get_cookie('sessionid')['value']

Результат:

1 08ba4efecf00d2b98aacd174ed20e144
2 08ba4efecf00d2b98aacd174ed20e144
3 08ba4efecf00d2b98aacd174ed20e144
4 cb49379190cb37735697c5c82ab300fc

Как видите, после того, как браузер browser1 открыл /admin/, его sessionid был неожиданно переопределен.

Как обойти это? Я пытаюсь, чтобы в браузере1 был тот же сеанс, что и в браузере0.

Исправлен код, спасибо Hedde ---

  def test_double_window_inactivity(self):
      self.browser.execute_script('window.open("/admin/", "other")')

      for win in self.browser.window_handles:
          self.browser.switch_to_window(win)
          self.assertWarningHidden()

      time.sleep(5+1)  # Added one second to compensate for fadeIn
      for win in self.browser.window_handles:
          self.browser.switch_to_window(win)
          self.assertWarningShown()

      time.sleep(5+1)  # Added one second to compensate for lag
      for win in self.browser.window_handles:
          self.browser.switch_to_window(win)
          self.assertWarningNotInPage()

person jpic    schedule 15.02.2013    source источник


Ответы (1)


Я верю, что все работает так, как должно. То есть сеансы должны быть разделены между вкладками и/или окнами, а не между браузерами.

Глядя на ваш код, кажется, что вы не собираетесь обмениваться сеансами между браузерами, только через два окна Firefox. Создание экземпляров двух классов WebDriver — это не то, как вы должны работать. Взгляните на исходный код селена, firefox.WebDriver наследуется от remote.WebDriver, у которого есть методы для переключения вкладок и/или окон (например, строка 490).

Вы должны установить браузер как переменную класса и соответственно открывать окна или вкладки из него.

person Hedde van der Heide    schedule 15.02.2013