2016-10-19 4 views
1

Итак, я просматриваю эту книгу под названием «Повинуйтесь тестирующему козу», и я столкнулся с проблемой в шестой главе, изучая Python. В нем говорится, что я должен иметь возможность запускать функциональные_тышки, которые мы установили во всей главе и предыдущей, без ошибок; однако, я продолжаю получать Traceback, что я не знаю, как исправить.Повинуйтесь тестируемому козу - Traceback

Traceback (most recent call last): 
    File "C:\Users\YaYa\superlists\functional_tests\tests.py", line 54, in test_can_start_a_list_and_retrieve_it_later 
    self.check_for_row_in_list_table('1: Buy peacock feathers') 
    File "C:\Users\YaYa\superlists\functional_tests\tests.py", line 15, in check_for_row_in_list_table 
    table = self.browser.find_element_by_id('id_list_table') 
    File "C:\Users\YaYa\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 269, in find_element_by_id 
    return self.find_element(by=By.ID, value=id_) 
    File "C:\Users\YaYa\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element 
    'value': value})['value'] 
    File "C:\Users\YaYa\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute 
    self.error_handler.check_response(response) 
    File "C:\Users\YaYa\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response 
    raise exception_class(message, screen, stacktrace) 
    selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"id_list_table"} 
Stacktrace: 
    at FirefoxDriver.prototype.findElementInternal_ (file:///C:/Users/YaYa/AppData/Local/Temp/tmp869pyxau/extensions/[email protected]/components/driver-component.js:10770) 
    at fxdriver.Timer.prototype.setTimeout/<.notify (file:///C:/Users/YaYa/AppData/Local/Temp/tmp869pyxau/extensions/[email protected]/components/driver-component.js:625) 

I've created a GIST in case anyone's interested in looking at the files that I've worked on throughout the chapters.

Вы также можете получить доступ к главе этой книги справа here.

Я действительно не знаю, в чем проблема (я плохо разбираюсь в Python AT ALL и пытался запустить pdb, но я даже не знаю, что это значит половина), и никто, кого я знаю, и что я «У меня есть информация о том, что я могу сделать, чтобы исправить это.

Заранее благодарен!

EDIT: Вот test_can_start_a_list_and_retrieve_it_later - просто примечание в случае его необходимости, но четкости test_can ... номер строки 19.

def test_can_start_a_list_and_retrieve_it_later(self): 
    # Edith has heard about a cool new online to-do app. She goes 
    # to check out its homepage 
    self.browser.get(self.live_server_url) 

    # She notices the page title and header mention to-do lists 
    self.assertIn('To-Do', self.browser.title) 
    header_text = self.browser.find_element_by_tag_name('h1').text 
    self.assertIn('To-Do', header_text) 

    # She is invited to enter a to-do item straight away 
    inputbox = self.browser.find_element_by_id('id_new_item') 
    self.assertEqual(
      inputbox.get_attribute('placeholder'), 
      'Enter a to-do item' 
    ) 

    # She types "Buy peacock feathers" into a text box (Edith's hobby 
    # is tying fly-fishing lures) 
    inputbox.send_keys('Buy peacock feathers') 

    # When she hits enter, the page updates, and now the page lists 
    # "1: Buy peacock feathers" as an item in a to-do list 
    inputbox.send_keys(Keys.ENTER) 
    edith_list_url = self.browser.current_url 
    self.assertRegex(edith_list_url, '/lists/.+') 
    self.check_for_row_in_list_table('1: Buy peacock feathers') 

    # There is still a text box inviting her to add another item. She 
    # enters "Use peacock feathers to make a fly" (Edith is very methodical) 
    inputbox = self.browser.find_element_by_id('id_new_item') 
    inputbox.send_keys('Use peacock feathers to make a fly') 
    inputbox.send_keys(Keys.ENTER) 

    # The page updates again, and now shows both items on her list 
    self.check_for_row_in_list_table('1: Buy peacock feathers') 
    self.check_for_row_in_list_table('2: Use peacock feathers to make a fly') 

    # Now a new user, Francis, comes along to the site. 

    ##We use a new browser session to make sure that no information 
    ##of Edith's is coming through from cookies etc 
    self.browser.quit() 
    self.browser = webdriver.Firefox() 

    #Francis visits the home page. There is no sign of Edith's 
    #list 
    self.browser.get(self.live_server_url) 
    page_text = self.browser.find_element_by_tag_name('body').text 
    self.assertNotIn('Buy peacock feathers', page_text) 
    self.assertNotIn('make a fly', page_text) 

    #Francis starts a new list by entering a new item. He 
    #is less interesting than Edith... 
    inputbox = self.browser.find_element_by_id('id_new_item') 
    inputbox.send_keys('Buy milk') 
    inputbox.send_keys(Keys.ENTER) 

    #Francis gets his own unique URL 
    francis_list_url = self.browser.current_url 
    self.assertRegex(francis_list_url, '/lists/.+') 
    self.assertNotEqual(francis_list_url, edith_list_url) 

    #Again, there is no trace of Edith's list 
    page_text = self.browser.find_element_by_tag_name('body').text 
    self.assertNotIn('Buy peacock feathers', page_text) 
    self.assertIn('Buy milk', page_text) 
    self.fail('Finish the test!') 

    # Satisfied, they both go back to sleep 

EDIT 2: Вот check_for_row_in_list_table. Обратите внимание, что это начинается в строке 14 документа.

def check_for_row_in_list_table(self, row_text): 
    table = self.browser.find_element_by_id('id_list_table') 
    rows = table.find_elements_by_tag_name('tr') 
    self.assertIn(row_text, [row.text for row in rows]) 
+1

Важно узнать, как читать трассировки. Соответствующая вещь здесь состоит из четырех строк: она говорит вам, что не может найти элемент на странице с этими параметрами. Теперь вам нужно опубликовать код для 'test_can_start_a_list_and_retrieve_it_later' в tests.py, чтобы мы могли понять, почему он это говорит. –

+0

Я добавил test_can_start_a_list_and_retrieve_it_later для просмотра всем. Обратите внимание, что def test_can ... запускается в строке 19 всего файла, к которому он принадлежит. –

+2

Мы, вероятно, также должны увидеть 'check_for_row_in_list_table'. –

ответ

2

Обнаружена ошибка в моей работе. Мне явно не хватало s в списке. Html

<form method="POST" action="/lists/{{ list.id }}/add_item">