使用实时数据库进行Django Selenium测试

时间:2019-12-23 22:37:33

标签: django selenium selenium-webdriver

我是硒的新手,正努力知道从哪里开始。

这有效-

class SignUpViewFunctionalTests(LiveServerTestCase):

    port = 9000
    host = '0.0.0.0'
    live_server_url = HTTP + LOCALHOST + ":" + "9000"

    def setUp(self):
        settings.DEBUG = True
        self.driver = webdriver.Remote(
            HTTP + LOCALHOST + ":" + str(SEL_PORT) + "/wd/hub",
            DesiredCapabilities.CHROME
        )

    def tearDown(self):
        self.driver.quit()
        super().tearDown()   


    def test_view_url(self):
        driver = self.driver
        driver.get(self.live_server_url + "/accounts/signup/")
        time.sleep(2)
        email_input = driver.find_element_by_name('email')
        email_input.send_keys('test@test.com')
        time.sleep(2)
        pwd_1_input = driver.find_element_by_name('password1')
        pwd_1_input.send_keys('Test123!')
        time.sleep(2)
        pwd_2_input = driver.find_element_by_name('password2')
        pwd_2_input.send_keys('Test123!')
        time.sleep(4)
        submit_btn = driver.find_element_by_name('submit')
        time.sleep(4)
        submit_btn.click()
        timeout = 4
        WebDriverWait(driver, timeout).until(
                lambda _driver: _driver.find_element_by_tag_name('body'))

但是,一旦我从STATICLIVESERVERTESTCASE继承,它就会使用实时数据库。我知道这是因为它无法创建用户-实时存在该用户,但在测试数据库中却不存在。

但是,如果我接管测试并亲自单击“提交”按钮,那就可以了!

我能找到的唯一测试django文档的部分似乎警告了这种奇怪的行为,即它所说的使用“内存中SQLite数据库”的地方-

  

同一数据库连接将由两个线程并行共享:运行实时服务器的线程和运行测试用例的线程。防止两个线程通过此共享连接同时进行数据库查询很重要,因为这有时可能会随机导致测试失败。因此,您需要确保两个线程不会同时访问数据库。特别是,这意味着在某些情况下(例如,在单击链接或提交表单之后),您可能需要检查Selenium是否收到了响应,并在继续进行进一步的测试执行之前加载了下一页< / p>

继续建议-

  

通过让Selenium等待直到在响应中找到HTML标签

这促使我将代码的最后一行包含在test_view_method中,但无济于事。

帮助!

0 个答案:

没有答案