그래서 "Obey the Testing Goat"이라는 책을 읽으면서 파이썬을 배우면서 6 장에서 문제를 다루고 있습니다. 그것은 내가 장 (chapter)과 이전의 것을 오류없이 설정 한 functional_tests를 실행할 수 있어야한다고 말한다. 그러나, 나는 내가 어떻게 고칠지를 모른다 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)
이 책의 장 (here)에 액세스 할 수도 있습니다.
정말 문제가 뭔지 모르겠다. (나는 파이썬 AT 모두 좋지 않다. 그리고 pdb를 실행 해 보았지만 그것의 절반이 무엇 인지도 모른다.) 그리고 내가 아는 사람은 아무도 없다. 묻는 질문에 내가 해결할 수있는 것에 대한 정보가 있습니다.
미리 감사드립니다.
편집 : 여기에 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
편집 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])
역 추적을 읽는 법을 배우는 것이 중요하다. 여기서 관련된 것은 아래에서 네 줄입니다.이 매개 변수를 사용하여 페이지에서 요소를 찾을 수 없다는 것을 알려줍니다. 이제'test_can_start_a_list_and_retrieve_it_later'에 대한 코드를 tests.py에 게시해야합니다. 그러면 왜 그렇게되는지 알 수 있습니다. –
모든 사람이 볼 수 있도록 test_can_start_a_list_and_retrieve_it_later를 추가했습니다. def test_can ...은 자신이 속한 전체 파일의 19 번째 줄에서 시작한다는 것을주의하십시오. –
우리는 아마도'check_for_row_in_list_table'도보아야 할 것입니다. –