非常に複雑なセットアップを使用して、さまざまな非公開Webページをテストしています。 jenkins
を使用して、docker
image内で_python-Selenium
_テストを実行します。そのようにして、私はジェンキンス環境から完全に独立しており、自分の環境を作成することができます。この環境では、次のソフトウェアがインストールされています。
Seleniumテストは、次の方法でWebDriver
を作成します。
_profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.dir", self.downloadpath)
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.useDownloadDir", True)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("pdfjs.disabled", True)
profile.set_preference("browser.helperApps.neverAsk.saveToDisk",
"application/force-download, image/png, text/html, text/plain, "
"image/tiff, text/csv, application/Zip, application/octet-stream")
profile.set_preference("browser.download.manager.alertOnEXEOpen", False)
profile.set_preference("browser.download.manager.focusWhenStarting", False)
profile.set_preference("browser.helperApps.alwaysAsk.force", False)
profile.set_preference("browser.download.manager.alertOnEXEOpen", False)
profile.set_preference("browser.download.manager.closeWhenDone", True)
profile.set_preference("browser.download.manager.showAlertOnComplete", False)
profile.set_preference("browser.download.manager.useWindow", False)
profile.set_preference("services.sync.prefs.sync.browser.download.manager.showWhenStarting",
False)
self.driver = webdriver.Firefox(profile, log_path = logfile)
_
ここで、logfile
および_self.downloadpath
_は、Dockerセットアップの2つの有効なパスです。
テストスイート全体は、6つの独立したテストケースで構成され、各テストケースは上記と同じ設定です。通常は問題なく実行され、問題なく完了します。
何も変更せずにテストまたは一般的なセットアップを行うと、テストが失敗して次のエラーメッセージが表示されることがあります。
_ File "/root/tests/bsp_usecase_tests/tools/basicsuite.py", line 210, in set_driver_firefox
self.driver = webdriver.Firefox(profile, log_path = logfile)
File "/usr/local/lib/python2.7/dist-packages/Selenium/webdriver/firefox/webdriver.py", line 158, in __init__
keep_alive=True)
File "/usr/local/lib/python2.7/dist-packages/Selenium/webdriver/remote/webdriver.py", line 154, in __init__
self.start_session(desired_capabilities, browser_profile)
File "/usr/local/lib/python2.7/dist-packages/Selenium/webdriver/remote/webdriver.py", line 243, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python2.7/dist-packages/Selenium/webdriver/remote/webdriver.py", line 311, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/dist-packages/Selenium/webdriver/remote/errorhandler.py", line 237, in check_response
raise exception_class(message, screen, stacktrace)
WebDriverException: Message: connection refused
_
2つの質問があります。
補遺:
webdriver.Firefox
_行の直前でtime.sleep(10)
を使用すると、エラーは表示されなくなりました。私はその行をwhile-try-exceptループに入れましたか?表示されているエラーは次のとおりです。
WebDriverException: Message: connection refused
ドキュメントによると WebDriverException
はBase webdriver exceptionであり、次のとおりです。
exception Selenium.common.exceptions.WebDriverException(msg=None, screen=None, stacktrace=None)
したがって、connection is refused here
は、Selenium
が、確立したい接続を確立できないことを意味します。
self.driver = webdriver.Firefox(profile, log_path = logfile)
可能な解決策は、次のようにlogfile
の完全な名前とlogfile
のlogical location
(Project Level
から)を提供することです。
self.driver = webdriver.Firefox(firefox_profile=profile, log_path='./Log/geckodriver.log')
ここでは、同様の Discussion
を見つけることができます
繰り返しますが、When I used a time.sleep(10) just before the webdriver.Firefox line, the error did not show up anymore
について述べたように、GeckoDriver
およびFirefox Browser
のインスタンスが以前にアクティブであったと仮定します。したがって、@ Florent B.が述べたのと同様に、スクリプトを直面 から保護する必要がありますRace Around Condition は、次のいずれかに起因します。
GeckoDriver
またはMarionette
以前のセッションがまだリリースしていない新しいセッションによる。Docker Image
ran メモリ不足ここでは、同様の Discussion
を見つけることができます。
上記の原因ごとに、次のいくつかの手順を実行する必要があります。
Selenium-Python
client 、WebDriver variant
( GeckoDriver
)およびWeb Browser
(Firefox Browser
)tearDown()
メソッドで使用して、webdriver
およびwebclient
=両方とも適切に破壊されます。Clean
the Project Workspace from from IDE
from before and afterあなたのTest Suite
。Clear
the Browser CacheTests
の実行前後CCleaner
ツールを使用して、古くなった Rust_mozprofile directories
を含むOS日課を一掃します。ここでどの接続が拒否されますか?エラーメッセージの意味は何ですか
Python webdriver APIとFirefox Webブラウザの間の接続。まあ、接続自体ではなく、Webドライバが送信した単一のリクエストはブラウザによって「拒否」されました。 JSON Wire protocol -JSON over HTTP。
このエラーを修正するにはどうすればよいですか?
通常、このようなエラーの場合、最も一般的な理由は互換性の問題です。言い換えれば、あなたのgeckodriver
バージョン0.18.0はFirefox 57には古すぎると思います。 geckodriver
を最新の安定バージョン(現在は .19.1 )にアップグレードします。
このエラーまたは同様のエラーに苦しんでいる他の誰かのために試してみるための簡単な修正-私はgeckodriver.log
ファイルを削除するとこのエラーがなくなることがわかりました。
これは、DebanjanBの回答の「プロジェクトワークスペースのクリーンアップ」の部分に含まれていますが、それを修正した具体的なアクションを共有したかっただけです。元のポスターのようなテストスイートを使用していないことに注意してください。
私が起こったのは、コードの別の部分のエラーのためにコードでdriver.close()
に到達しなかった以前のwebdriver.Firefox
インスタンスがあり、それがまだデバッグ中であったことでした。ログファイルgeckodriver.log
をリリースしていません。
したがって、ログファイルの名前を変更するか、別のログファイルに書き込むことで、この問題が解決される可能性があると思います。