python - Django Selenium 测试,创建用户并检查登录

标签 python django testing selenium

我正在尝试测试用户是否可以使用 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 确实得到了一个登录页面,因为有一个服务器响应。但是,当您尝试登录时,它会失败,因为您创建的用户是在为测试而创建的测试 数据库中创建的,而不是在开发 数据库中创建的。

解决方案有两个:

  1. 根据 migonzalvar 建议的 django.test.LiveServerTestCase 测试用例,以便启动测试服务器。

  2. 设置您的 BASE_URL 以连接到此服务器。默认地址是 localhost:8081。查看documentation如果您需要更改地址。

关于python - Django Selenium 测试,创建用户并检查登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795148/

相关文章:

django - Django:按FileField.name搜索(过滤)

python - 在 python 中有效地对不同输入(不同大小)的函数进行基准测试

python - 用户的django默认外键值

http - 在http请求中拦截并使用本地文件

java - 如何自动化从大型数据库查询的测试? (导入或创建)

python - 在视频URL上调用Opencv的视频捕获在Heroku上不起作用

python - numpy 数组的 bool /非零索引循环的替代方案

python - 如何根据不同的列用 NA 填充名称

python - 无法使用 pip 安装 pygame,因为在为 pygame 运行 vsetup.py bdist_wheel 时出现错误

python-3.x - django allauth 中的 Django 排序字段