1

Djangoでこのエラーが発生します

RuntimeError: Failed to shutdown the live test server in 2 seconds. The server might be stuck or generating a slow response.

Webサイトのメニューで簡単なテストを実行しようとしています。メニューはアコーディオンスタイルです(概要メニューの下の[例]までスクロールダウンします。アコーディオンはデモ内のもので、メニューはクリック方法に応じて表示および非表示になります: http: //docs.jquery.com/UI/アコーディオン#overview

メニューの1つを開くと、検索用のテキストボックスが表示されます。私がやろうとしているのは、そのボタンを押してから、いくつかの値を入力し、[Enter]をクリックして検索結果を表示することです。

コード

from django.test import LiveServerTestCase
from selenium.webdriver.firefox.webdriver import WebDriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import time

class SeleniumTests(LiveServerTestCase):
    fixtures = ['testData.json',]

    @classmethod
    def setUpClass(cls):
        cls.driver = WebDriver()
        super(SeleniumTests, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        super(SeleniumTests, cls).tearDownClass()
        cls.driver.quit()

    def test_example(self):

        #load the site 
        self.driver.get('%s%s' % (self.live_server_url, '/testingDB/'))
        #find the accordion button
        elem1 = self.driver.find_element_by_id("search_button")
        #click it
        elem1.click()

        #wait a little bit so the accordion loads 
        self.driver.implicitly_wait(5)
        #could've also used this command ->time.sleep(1)

        #find the element that now appeared
        elem = self.driver.find_element_by_name("q")
        #enter the search query and press enter 
        elem.send_keys("selenium" + Keys.RETURN)
        #assert that a new page loaded, with Search in the title
        assert "Search" in self.driver.title

テストはうまく機能しますが、Djangoでエラーが発生します。時間を短くしすぎると、セレンは検索ボックスを見つけることができなくなり、

Element is not currently visible and so may not be interacted with

ライブテストサーバーエラーを回避する方法がわかりません。( https://docs.djangoproject.com/en/dev/topics/testing/#django.test.LiveServerTestCaseから取得したDjango情報)

追加情報

これがメニューです:

パート1

ここに画像の説明を入力してください

次に「検索」をクリックすると、約0.5秒で以下が表示されます。

パート2 ここに画像の説明を入力してください

4

2 に答える 2

6

表示されているエラーは、にあるクリーンアップコードに関連していますSeleniumTests.tearDownClass(cls)。そのメソッド内で、呼び出すcls.driver.quit()前に呼び出すとsuper(SeleniumTests, cls).tearDownClass()、エラーはなくなります。

于 2012-09-05T22:38:46.367 に答える
1

私の解決策はこれを行う正しい方法ではないことを私は知っていますが、これは最終的に私のために働いたものです:

まず、diliopが提案するように、ティアダウンクラスのメソッド呼び出しを反転しました。

@classmethod
def tearDownClass(cls):
    super(SeleniumTests, cls).tearDownClass()
    cls.driver.quit() 

ただし、これにより別のエラーが発生しまし[Errno 10054] An existing connection was forcibly closed by the remote hostた。すべてが正常に機能し、Webサイトが閉じられ、すべてのテストに合格しましたが、このエラーは最後に表示されました。

別のページに移動して、(最初のメインページではなく)そのページからWebサイトを閉じようとすると、エラーが消えることに気づきました。だから私はtearDownに以下を入れました:

def tearDown(self):
    #go to main page
    self.driver.get('%s%s' % (self.live_server_url, '/testingDB/'))
    #find the first button
    elemOptionSet = self.driver.find_element_by_id("optionSetPage")
    #click it
    elemOptionSet.click()

その後、セレンがWebサイトを閉じようとしても、エラーは発生しません。誰かがこの振る舞いを説明できれば、それは素晴らしいことです!しかしそれまでは、これで十分です。

于 2012-09-06T18:38:00.700 に答える