我正在使用Firefox驱动程序使用selenium编写针对Django的StaticLiveServerTestCase
的功能测试。
出于某种原因,我的send_keys
在中间被切断,其余的被发送到另一个领域:
这是我的测试用例非常接近the example in Django documentation。
from django.contrib.auth import get_user_model
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium.webdriver.firefox.webdriver import WebDriver
User = get_user_model()
class LoginSpec(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super(LoginSpec, cls).setUpClass()
cls.selenium = WebDriver()
User.objects.create_user('username', 'username@example.com', 'password')
@classmethod
def tearDownClass(cls):
User.objects.all().delete()
cls.selenium.quit()
super(LoginSpec, cls).tearDownClass()
def test_login_with_valid_credentials(self):
self.selenium.get('%s%s' % (self.live_server_url, "/login"))
username = self.selenium.find_element_by_name("username")
username.send_keys("username")
password = self.selenium.find_element_by_name("password")
password.send_keys("password")
...
答案 0 :(得分:0)
看起来(出于某种原因)有些东西将“用户名”中的“r”解释为控件字符(将焦点移动到下一个字段),而不是常规字符。 / p>
两种可能的解决方法:您可以在调用send_keys
之前clear()
元素和/或一次一个地发送字符串中的字母:
def test_login_with_valid_credentials(self):
self.selenium.get('%s%s' % (self.live_server_url, "/login"))
username = self.selenium.find_element_by_name("username")
username.clear()
username.send_keys("username")
# if clear() alone doesn't solve the problem, you might also try:
# for x in list("username"):
# username.send_keys(x)
password = self.selenium.find_element_by_name("password")
password().clear
password.send_keys("password")
...