Python 3.5; Django 1.10.7
I am struggling to get access to the admin pages via Selenium.
I assume the issue is with the user login not being set properly - I don't
want to go via the login page/form every time, so was attempting the
session approach. Below is the code that shows the problem. The last few
lines are attempting to access a known element (appears on any admin page);
but the actual page that gets displayed is one you would see if you were
not logged in.
Any hints on how to make this work would be appreciated.
# -*- coding: utf-8 -*-
"""
Purpose: Test admin list display
"""
# lib
import os
# third party
from selenium import webdriver
# django
from django.conf import settings
from django.test import LiveServerTestCase
from django.contrib.auth import get_user_model, SESSION_KEY, \
BACKEND_SESSION_KEY, HASH_SESSION_KEY
from django.contrib.sessions.backends.db import SessionStore
# project
from users.models import CustomUser as User
os.environ['DJANGO_LIVE_TEST_SERVER_ADDRESS'] = 'localhost:8007'
class LoginSeleniumTest(LiveServerTestCase):
"""selenium-based test"""
def setUp(self):
# setup browser
if settings.USE_CHROME:
self.browser = webdriver.Chrome(settings.CHROME_DRIVER)
elif settings.USE_FF:
self.browser = webdriver.Firefox()
else:
raise NotImplementedError('Unknown browser for Selenium tests')
# create user
self.email = '[email protected]'
user = User(
is_staff=True, is_active=True, is_superuser=True,
email=self.email, full_name="Foo Bar", nick_name="Foo")
user.set_password('foobar')
user.save()
super(LoginSeleniumTest, self).setUp()
def test_login_and_access_admin(self):
# create fake session with real user
user = get_user_model().objects.get(email=self.email)
self.session = SessionStore()
self.session[SESSION_KEY] = user.pk
self.session[BACKEND_SESSION_KEY] =
'django.contrib.auth.backends.ModelBackend'
self.session[HASH_SESSION_KEY] = user.get_session_auth_hash()
self.session.save()
print("HASH_KEY:\n", self.session[HASH_SESSION_KEY])
# set cookie based on current page domain
self.browser.get(self.live_server_url + '/dummy/')
self.browser.add_cookie(
{'name': settings.SESSION_COOKIE_NAME,
'value': self.session.session_key,
'secure': False,
'path': '/'}
)
# access an admin (password-protected) page
page_name = '/admin/'
print("URL:\n", self.live_server_url + page_name)
self.browser.get(self.live_server_url + page_name)
print("PAGE:\n", self.browser.page_source)
# throws a selenium.common.exceptions.NoSuchElementException ...?
result = self.browser.find_element_by_id('user-tools')
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CAF1Wu3PtwvY6pNriiTTkYEws0Gg2gU90FQmkFC7Doc3TVHFg7Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.