【发布时间】:2015-08-15 17:16:34
【问题描述】:
我正在研究一个书籍存储库,特别是测试驱动开发的第 5 章,可以在这个存储库中找到它:https://github.com/hjwp/book-example/tree/chapter_05。当我尝试运行功能测试时,创建一个简单的 POST 表单,提交一些输入,然后检查输入是否已呈现,我收到以下错误:
======================================================================
FAIL: test_can_start_a_list_and_retrieve_it_later (__main__.NewVisitorTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "book-example-chapter_05/functional_tests.py", line 45, in test_can_start_a_list_and_retrieve_it_later
self.check_for_row_in_list_table('1: Buy peacock feathers')
File "book-example-chapter_05/functional_tests.py", line 18, in check_for_row_in_list_table
self.assertIn(row_text, [row.text for row in rows])
AssertionError: '1: Buy peacock feathers' not found in ['']
---------------------------------------------------------------------
从邮件列表上的讨论看来,这可能是由于浏览器没有收到“ENTER”键。当我将行更改为inputbox.send_keys('Buy peacock feathers\n'),直接发送一个换行符时,我收到以下错误:
======================================================================
ERROR: test_can_start_a_list_and_retrieve_it_later (__main__.NewVisitorTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "book-example-chapter_05/functional_tests.py", line 44, in test_can_start_a_list_and_retrieve_it_later
inputbox.send_keys(Keys.ENTER)
File "/Users/r/virtualenvs/r/bin/python3venv/lib/python3.4/site-packages/selenium/webdriver/remote/webelement.py", line 322, in send_keys
self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': typing})
File "/Users/r/virtualenvs/r/bin/python3venv/lib/python3.4/site-packages/selenium/webdriver/remote/webelement.py", line 448, in _execute
return self._parent.execute(command, params)
File "/Users/r/virtualenvs/r/bin/python3venv/lib/python3.4/site-packages/selenium/webdriver/remote/webdriver.py", line 196, in execute
self.error_handler.check_response(response)
File "/Users/r/virtualenvs/r/bin/python3venv/lib/python3.4/site-packages/selenium/webdriver/remote/errorhandler.py", line 181, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked up
Stacktrace:
at fxdriver.cache.getElementAt (resource://fxdriver/modules/web-element-cache.js:9348)
at Utils.getElementAt (file:///var/folders/k5/t81w4vh94rg1ps_h5tb_vbr00000gn/T/tmp0cz8wkgo/extensions/fxdriver@googlecode.com/components/command-processor.js:8942)
at fxdriver.preconditions.visible (file:///var/folders/k5/t81w4vh94rg1ps_h5tb_vbr00000gn/T/tmp0cz8wkgo/extensions/fxdriver@googlecode.com/components/command-processor.js:9980)
at DelayedCommand.prototype.checkPreconditions_ (file:///var/folders/k5/t81w4vh94rg1ps_h5tb_vbr00000gn/T/tmp0cz8wkgo/extensions/fxdriver@googlecode.com/components/command-processor.js:12626)
at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/k5/t81w4vh94rg1ps_h5tb_vbr00000gn/T/tmp0cz8wkgo/extensions/fxdriver@googlecode.com/components/command-processor.js:12643)
at fxdriver.Timer.prototype.setTimeout/<.notify (file:///var/folders/k5/t81w4vh94rg1ps_h5tb_vbr00000gn/T/tmp0cz8wkgo/extensions/fxdriver@googlecode.com/components/command-processor.js:623)
----------------------------------------------------------------------
Ran 1 test in 5.511s
所以这似乎表明 DOM 树存在错误,并且它试图找到的下一个元素(一个 id 等于 'id_list_table' 的元素)找不到。
为什么会这样?如何让 Selenium 测试添加的列表项及其在我创建的表中的存在?
【问题讨论】: