我正在尝试测试用户是否可以使用 selenium 登录并查看他们的帐户仪表板。
我在 setUp() 函数中创建了用户,但是当我尝试登录时,登录失败。似乎没有创建用户。 (虽然当我在 setUp 中添加一个断点时..它是)
class MyTestCase(TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
# create user
self.user = User.objects.create_user(username=USERNAME,
email=None,
password=PASSWORD)
def tearDown(self):
self.driver.quit()
User.objects.all().delete()
def test_login(self):
self.driver.get(BASE_URL + '/accounts/login/?next=/dashboard')
username = self.driver.find_element_by_css_selector(
'.width-half.right #id_username')
username.send_keys(USERNAME)
password = self.driver.find_element_by_css_selector(
'.width-half.right #id_password')
password.send_keys(PASSWORD)
btn_login = self.driver.find_element_by_css_selector(
'.width-half.right .actions button')
# Login
btn_login.click()
# Check on the user dashboard
WebDriverWait(self.driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.dash-left')))
有什么想法吗?
最佳答案
根据您描述的情况,我认为这是正在发生的事情。您的 BASE_URL
设置为连接到您使用 ./manage.py runserver
启动的开发 服务器。 (它不能连接到由 TestCase
启动的测试服务器,因为 TestCase
不启动服务器,但它连接到某物,这必须是你的开发服务器。)所以 Selenium 确实得到了一个登录页面,因为有一个服务器响应。但是,当您尝试登录时,它会失败,因为您创建的用户是在为测试而创建的测试 数据库中创建的,而不是在开发 数据库中创建的。
解决方案有两个:
根据 migonzalvar 建议的
django.test.LiveServerTestCase
测试用例,以便启动测试服务器。设置您的
BASE_URL
以连接到此服务器。默认地址是localhost:8081
。查看documentation如果您需要更改地址。
关于python - Django Selenium 测试,创建用户并检查登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795148/