研究Python的TDD,第5章,Django 1.8,Python 2.7,以及引入CSRF令牌后,事情变得很奇怪。我已经阅读了许多其他文章,并且能够解决大多数问题,但是我在解决这一问题时遇到了麻烦...
我不断收到StaleReferenceException,但无法复制。它间歇性地出现。如果我连续两次运行functional_test.py,则测试最终将按预期返回...
我不确定这是时间问题还是其他问题。关于如何进行追踪的任何想法?
(venv_unittesting) roadblock:superlists Admin$ python functional_test.py
E
======================================================================
ERROR: test_open_home_page_header_input_table (__main__.NewVisitorTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "functional_test.py", line 39, in test_open_home_page_header_input_table
rows = table.find_elements_by_tag_name('tr')
File "/Users/Admin/coding/django/venv_unittesting/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 320, in find_elements_by_tag_name
return self.find_elements(by=By.TAG_NAME, value=name)
File "/Users/Admin/coding/django/venv_unittesting/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 680, in find_elements
{"using": by, "value": value})['value']
File "/Users/Admin/coding/django/venv_unittesting/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 628, in _execute
return self._parent.execute(command, params)
File "/Users/Admin/coding/django/venv_unittesting/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 320, in execute
self.error_handler.check_response(response)
File "/Users/Admin/coding/django/venv_unittesting/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
StaleElementReferenceException: Message: The element reference of <table id="id_list_table"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
----------------------------------------------------------------------
Ran 1 test in 9.359s
FAILED (errors=1)
(venv_unittesting) roadblock:superlists Admin$ python functional_test.py
F
======================================================================
FAIL: test_open_home_page_header_input_table (__main__.NewVisitorTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "functional_test.py", line 43, in test_open_home_page_header_input_table
table.text,)
AssertionError: Not located on this page:
Buy Peacock Feathers
----------------------------------------------------------------------
Ran 1 test in 8.907s
FAILED (failures=1)
(venv_unittesting) roadblock:superlists Admin$
Functional_test.py
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest
import time
class NewVisitorTest(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(2)
def tearDown(self):
self.browser.quit()
# self.fail('Finish Testing! or put next task here')
#A new user heard about a Todo list and want to to
# Open the add
def test_open_home_page_header_input_table(self):
self.browser.get('http://localhost:8000')
self.assertIn('To-Do', self.browser.title)
header_text = self.browser.find_element_by_tag_name('h1').text
self.assertIn('To-Do', header_text)
inputbox = self.browser.find_element_by_id('id_new_item')
self.assertEqual(inputbox.get_attribute('placeholder'),
'Enter a to-do item')
inputbox.send_keys('Buy peacock Feathers')
inputbox.send_keys(Keys.ENTER)
# time.sleep(10)
table = self.browser.find_element_by_id('id_list_table')
rows = table.find_element_by_tag_name('tr')
# self.assertTrue(
# any(row == '1: Buy Peacock Feathers' for row in rows),
# 'Not located on this page')
self.assertIn('1: Buy peacock feathers', [row.text for row in rows])
if __name__ == '__main__':
unittest.main()
答案 0 :(得分:0)
呃...这本书是TLDR!
第389页
Unexpected StaleElementException errors from Selenium often mean you have some kind of race condition. You should probably specify an explicit interaction/wait pattern.
它是固定的...