Я пытаюсь использовать Pytest с плагином Django и Selenium для тестирования проекта Django 2.2, который выполняется в Docker, но я не могу подключить Selenium к тестовому серверу.Selenium продолжает возвращать «Адрес недоступен», когда я пытаюсь подключиться, используя настройки ниже.
Мой состав Docker:
version: '3'
volumes:
local_postgres_data: {}
services:
django:
build:
context: .
dockerfile: ./compose/local/django/Dockerfile
image: local_django
depends_on:
- postgres
volumes:
- .:/app
env_file:
- ./.envs/.local/.django
- ./.envs/.local/.postgres
ports:
- "8000:8000"
links:
- selenium
command: /start
postgres:
build:
context: .
dockerfile: ./compose/local/postgres/Dockerfile
image: local_postgres
volumes:
- local_postgres_data:/var/lib/postgresql/data
env_file:
- ./.envs/.local/.postgres
selenium:
image: selenium/standalone-firefox
ports:
- "4444:4444"
Я определил DJANGO_LIVE_TEST_SERVER_ADDRESS=django
в моем .django
файл env и настройте прибор в conftest.py
для удаленного веб-драйвера Selenium:
import environ
import pytest
from selenium.webdriver import Remote
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
env = environ.Env()
@pytest.fixture(scope='session')
def selenium() -> Remote:
driver = Remote(
command_executor=env('SELENIUM_HOST', default='http://selenium:4444/wd/hub'),
desired_capabilities=DesiredCapabilities.FIREFOX
)
yield driver
Мой тестовый пример с использованием моего приспособления selenium
и приспособления live_server
, предоставленного Django-PyTest:
import pytest
class TestDashboard:
def test_loads(self, selenium, live_server):
selenium.get(live_server.url)
assert My Site' in selenium.title
повышает OSError: [Errno 99] Address not available
в конструкторе live_server
.
Помимо прочего, я также пытался использовать класс StaticLiveServerTestCase
напрямую, опуская live_server
и мой selenium
приспособление, но это не сработало намного лучше:
import pytest
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium.webdriver import Remote
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
pytestmark = pytest.mark.django_db
class TestDashboardView(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
cls.host = 'django'
cls.selenium = Remote(
command_executor='http://selenium:4444/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX
)
super().setUpClass()
@classmethod
def tearDownClass(cls):
cls.selenium.quit()
super().tearDownClass()
def test_page_loads(self):
self.selenium.get(self.live_server_url)
assert "My Site" in self.selenium.title
Эта версия теста также поднимает OSError: [Errno 99] Address not available
.
Есть ли у кого-нибудь здесь какие-либо указатели относительно того, кем я могу бытьделать неправильно и как я могу исправить это?Было бы здорово, если бы Selenium работал вместе с моими существующими тестами на сервере.