Skip to main content
 首页 » 编程设计

python之send_keys 在 Django 测试中不起作用

2025年04月02日36pander-it

我要功能测试

功能测试过程是

  1. 创建用户
  2. 使用创建的用户登录网站
  3. 单击名为 booksale 的按钮>

在 myproject/functional_test/test_booksale.py

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from django.test import LiveServerTestCase 
 
from users.models import User 
 
 
class OurClientLogInTest(LiveServerTestCase): 
 
    def setUp(self): 
        self.browser = webdriver.Firefox() 
        ## create 1 user id 
        User.objects.create_user(username='MyTestID', password='123', nickname='NICKNAMETEST', phone='01011111111') 
 
 
    def tearDown(self): 
        self.browser.quit() 
 
    def test_our_client_can_log_in_this_website(self): 
 
        # url connect 
        self.browser.get(self.live_server_url) 
 
        # web page header title has 'Korea book' 
        self.assertIn('Korea book', self.browser.title) 
 
        # click log_in button in main page 
        log_in = self.browser.find_element_by_id('log_in') 
        log_in.send_keys(Keys.ENTER) 
        self.assertIn('로그인', self.browser.title) 
 
        # insert username, password 
        # click enter 
        username_box = self.browser.find_element_by_name('username') 
        password_box = self.browser.find_element_by_name('password') 
 
        username_box.send_keys('MyTestID') 
        password_box.send_keys('123') 
 
        self.browser.find_element_by_id('button').click() 
 
        ##redirect main page 
        self.assertIn('Korea book', self.browser.title) 
 
        ## click a button named book_sale 
        book_sale = self.browser.find_element_by_id('book_sale') 
        book_sale.send_keys(Keys.ENTER) 
 
        from IPython import embed; embed() 

我命令 python manage.py functional_test

它告诉我错误

raceback (most recent call last): 
  File "/Users/hanminsoo/.pyenv/versions/3.5.1/lib/python3.5/wsgiref/handlers.py", line 137, in run 
self.result = application(self.environ, self.start_response) 
  File "/Users/hanminsoo/.pyenv/versions/study_alone/lib/python3.5/site-packages/django/test/testcases.py", line 1198, in __call__ 
return super(FSFilesHandler, self).__call__(environ, start_response) 
  File "/Users/hanminsoo/.pyenv/versions/study_alone/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 177, in __call__ 
response = self.get_response(request) 
  File "/Users/hanminsoo/.pyenv/versions/study_alone/lib/python3.5/site-packages/django/test/testcases.py", line 1181, in get_response 
return self.serve(request) 
  File "/Users/hanminsoo/.pyenv/versions/study_alone/lib/python3.5/site-packages/django/test/testcases.py", line 1193, in serve 
return serve(request, final_rel_path, document_root=self.get_base_dir()) 
  File "/Users/hanminsoo/.pyenv/versions/study_alone/lib/python3.5/site-packages/django/views/static.py", line 54, in serve 
fullpath = os.path.join(document_root, newpath) 
  File "/Users/hanminsoo/.pyenv/versions/3.5.1/lib/python3.5/posixpath.py", line 89, in join 
genericpath._check_arg_types('join', a, *p) 
  File "/Users/hanminsoo/.pyenv/versions/3.5.1/lib/python3.5/genericpath.py", line 143, in _check_arg_types 
(funcname, s.__class__.__name__)) from None 
TypeError: join() argument must be str or bytes, not 'NoneType' 

当我删除代码时

book_sale.send_keys(Keys.ENTER) 

很明显测试通过了

我不明白为什么 book_sale 按钮不发送 ENTER KEY..

请一些人帮助我

请您参考如下方法:

如果 book_sale 元素是按钮,你应该尝试使用 .click()而不是 send_keys()作为:-

book_sale.click()