[英]How to make Selenium and django use the same database
我是使用 Selenium 的新手。
我在使用它時遇到了問題。 如果我理解正確,當我運行我的測試套件(./manage.py 測試)時,django 將創建一個新的數據庫來運行測試套件。 但是如果我在這些測試套件中包含 Selenium 測試,似乎 Selenium 連接到我的服務器並訪問我的真實數據庫,這使我的測試失敗。
我正在嘗試做的是能夠將真實數據庫與 django 測試一起使用,或者能夠將測試數據庫與 Selenium 一起使用。
我的問題有解決方案嗎?
from django.test import TestCase
from .models import Visit
#SELENIUM
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
# Create your tests here.
from django.test import TestCase
# Faker
from faker import Faker
fake = Faker(['fr'])
def test_connect(driver):
driver.get("http://demo.localhost:8000/")
title = driver.title
username = driver.find_element(by=By.NAME, value="login")
password = driver.find_element(by=By.NAME, value="password")
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button[type='submit']")
username.send_keys("demo")
password.send_keys("demo")
submit_button.click()
driver.implicitly_wait(1)
driver.find_element(by=By.XPATH, value="//p[contains(text(),'Aucun dossier ou fichier')]")
class VisitCreationTestCase(TestCase):
def setUp(self) -> None:
service = ChromeService(executable_path=ChromeDriverManager().install())
self.driver = webdriver.Chrome(service=service)
test_connect(self.driver)
def tearDown(self) -> None:
self.driver.quit()
def test_login(self):
self.driver.find_element(by=By.PARTIAL_LINK_TEXT, value="Créer une visite").click()
form = self.driver.find_element(by=By.ID, value="createVisitForm")
name = form.find_element(by=By.NAME, value="name")
description = form.find_element(by=By.NAME, value="description")
company_name = fake.company()
name.send_keys(company_name)
company_description = fake.text()
description.send_keys(company_description)
submit = form.find_element(by=By.CSS_SELECTOR, value="input[type='submit']")
submit.click()
# assert Visit.objects.filter(name=company_name, description=company_description).exists()
print(Visit.objects.filter(name=company_name, description=company_description).exists())
return
您正在連接到真實服務器:
driver.get("http://demo.localhost:8000/")
難怪您使用的是真實數據庫,因為您正在輸入真實站點。 您需要使用live_server_url
而不是TestCase
,使用即StaticLiveServerTestCase
:
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
class VisitCreationTestCase(StaticLiveServerTestCase):
def check_connect(self, driver):
driver.get(self.live_server_url)
...
def setUp(self) -> None:
...
self.check_connect(self.driver)
def test_login(...):
...
您可以在Obey testing goat中找到一些很好的練習幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.