为什么selenium-webdriver(LiveServerTestCase)仍然指向错误的数据库?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么selenium-webdriver(LiveServerTestCase)仍然指向错误的数据库?相关的知识,希望对你有一定的参考价值。
我正在使用Selenium为Django应用程序运行一些集成测试(对于开发数据库使用postgres
。
我通过创建Model对象来设置测试。然后,测试将通过浏览器(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)
以上是关于为什么selenium-webdriver(LiveServerTestCase)仍然指向错误的数据库?的主要内容,如果未能解决你的问题,请参考以下文章
使用 selenium-webdriver/firefox (NodeJS) 设置 userAgent
如何修复 selenium-webdriver 错误 - $ 未定义?
Selenium-Webdriver (Java) 无法始终执行“悬停和单击”功能