Почему селен-webdriver (LiveServerTestCase) по-прежнему указывает на неправильную базу данных? - PullRequest
0 голосов
/ 08 июля 2019

Я использую Selenium для запуска некоторых интеграционных тестов для приложения Django (используя postgres для базы данных разработки).

Я настраиваю тесты, создавая объект Model.Затем тесты взаимодействуют с объектом через браузер (selenium-webdriver) или напрямую через запросы к базе данных.

Тесты, использующие webdriver, не могут получить доступ к объекту модели.База данных запросов может.

Я пришел к выводу, что webdriver не указывает на правильную базу данных.

Я пытался использовать LiveServerTestCase, явно указав ему порт и URL-адрес, который я хочу использовать (localhost:8001), и используя live_server_url, чтобы он сам решал.Ни один из них не сработал.

Вот проверяемая форма - это простой выбор из списка объектов.

forms.py


class FooForm(form.Form):
    foo = forms.ModelChoice.Field(
                required=False,
                label='select',
                queryset=Foo.objects.all(),
                widget=forms.Select(),
                )

Вот настройки БД.

settings.py

DATABASES = {
        'default':{
                'ENGINE': 'django.db.backends.postgresql_psycopg2',
                'NAME': 'app',
                'USER': 'user',
                'PASSWORD': 'password',
                'HOST': 'localhost',
                'PORT': '',
                }
              }

Вот тесты.

test.py

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.select import Select
from django.test import LiveServerTestCase
from app.models import Foo

class BasicTestCase(LiveServerTestCase):
    def setUp(self):
        foo = Foo.objects.create(name='test_foo')
        self.selenium = webdriver.Firefox()
        super(BasicTestCase, self).setUp()

    def tearDown(self):
        self.selenium.quit()
        super(BasicTestCase, self).tearDown()

    def test_can_interact_via_db_query(self):
        self.assertEqual(Foo.objects.get(id=1).name, 'test_foo')

    def test_can_interact_via_webdriver_query(self):
        self.selenium.get('%s%s' %(self.live_server_url, '/page/'))
        elem = Select(self.selenium.find_element_by_id('id_foo'))
        foo_name = elem.select_by_index(0)
        self.assertEqual(foo_name, 'test_foo')

Я ожидаю, что оба эти теста пройдут,

Я вижу, как открывается браузер, и с которой взаимодействует страница.

test_can_interact_via_db_query проходит.

test_can_interact_via_webdriver_query завершается с ошибкой подтверждения None != test_foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...