【问题标题】:send_keys does not working in django testingsend_keys 在 django 测试中不起作用
【发布时间】:2016-08-12 07:42:53
【问题描述】:

我想要功能测试

功能测试流程是

  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 是按钮,你为什么不使用book_sale.click() 而不是send_keys()??
  • @e4c5 ummm,,,, 我无法理解你的评论but in what happens when the form is submitted...你能告诉我一个更简单的建议吗?
  • 在表单上单击提交或回车通常会导致表单被提交。此 stacktrae 不显示您的测试代码中的任何行或与之相关的任何内容。一定是表单提交引起的
  • @SaurabhGaur 哦,我的上帝......我已经尝试过click 方法......但我没有插入刹车......谢谢!!

标签: python django selenium testing


【解决方案1】:

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

book_sale.click()

【讨论】:

  • 谢谢@Saurahb Gaur 我用你的解决方案解决了我的问题!
  • @MinHan 欢迎您,正如我在您提供的代码中看到的那样,您正在使用.send_keys(Keys.ENTER) 执行点击的所有位置,也需要将其替换为.click() ..:)
猜你喜欢
  • 2019-05-04
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 2016-04-12
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多