Python selenium send_keys在完成第一个字符串之前切换输入

时间:2016-02-17 22:23:01

标签: python django selenium

我正在使用Firefox驱动程序使用selenium编写针对Django的StaticLiveServerTestCase的功能测试。

出于某种原因,我的send_keys在中间被切断,其余的被发送到另一个领域:

"user" in username field, "namepassword" in password field.
密码字段的类型设置为“text”以显示问题。

这是我的测试用例非常接近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")
        ...

1 个答案:

答案 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")
    ...