2016-06-24 11 views
0

私はこの本で「django」を学んでいます。
問題は、機能テストでランダムな結果が得られることです。
これは時々テストに合格し、ほとんどの時間はかかりません。
エラーが発生しても、エラーヒントは
http.client.RemoteDisconnected: Remote end closed connection without responseです。djangoセレンテストクローズブラウザが早すぎる

私は、ブラウザがいつもテストが終了する前に閉じてしまうことに気付きました。しかし、私はそれを修正する理由と方法を知らない。

 
from django.contrib.staticfiles.testing import StaticLiveServerTestCase 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 


class NewVisitorTest(StaticLiveServerTestCase): 
    def setUp(self): 
     self.browser = webdriver.Firefox() 
     self.browser.implicitly_wait(10) 

    def tearDown(self): 
     self.browser.quit() 

    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]) 

    def test_01_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) 
     self.browser.set_window_size(1024, 768) 

     # She notices the input box is nicely centered 
     inputbox = self.browser.find_element_by_id('id_new_item') 
     self.assertAlmostEqual(
      inputbox.location['x'] + inputbox.size['width']/2, 
      512, 
      delta=5 
     ) 
     # 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('2: Use peacock feathers to make a fly') 
     # self.check_for_row_in_list_table('1: Buy peacock feathers') 

     # 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) 

     # Satisfied, they both go back to sleep 

+0

'Firefox 'を' PhantomJS'に置き換えるとどうなりますか? – intelis

+0

@intelis「phantomjs」実行ファイルはPATHにある必要があります。 ' – John

答えて

0

問題はFirefoxのwebdriverにあります。
@intelisが提案しているように、私はクロムドライバに切り替わり、テストは安定します。
この投稿の時点で、私はSelenium 2.53.5を使用しています。私はchrome driver 2.22 linux-64に切り替えました。

関連する問題