簡體   English   中英

如何使Selenium和django使用同一個數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM