gpt4 book ai didi

python - 为什么 selenium-webdriver (LiveServerTestCase) 仍然指向错误的数据库?

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:42 25 4
gpt4 key购买 nike

我正在使用 Selenium 为 Django 应用运行一些集成测试(使用 postgres 作为开发数据库)。

我通过创建模型对象来设置测试。然后,测试通过浏览器 (selenium-webdriver) 或直接通过数据库查询与对象交互。

使用 webdriver 的测试无法访问 Model 对象。数据库查询就可以。

我得出的结论是 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

最佳答案

我从根本上误解了 Select 对象发生的情况。我只是选择该项目,而不是询问它。不涉及数据库问题。

这是测试的粗略工作版本

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'))
things = [o.text for o in elem.options]
found = False
for thing in things:
if thing == 'test_foo':
found = True

self.assertTrue(found)

关于python - 为什么 selenium-webdriver (LiveServerTestCase) 仍然指向错误的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56935130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com