我是硒的新手,正努力知道从哪里开始。
这有效-
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中,但无济于事。
帮助!