次のようなテストがあります。
import //needed imports
public class TestClass{
WebDriver driver;
@Before
public void setUp() {
//some code
}
@Test
public void test1() {
//some code, including init of driver (geckodriver)
}
//@After
// public void tearDown() {
// driver.quit();
//}
}
そこで、Firefoxインスタンスを使用してgeckodriverを初期化し、テストを正常に実行しました。しかし、実行後は毎回firefoxウィンドウを閉じないようにしたいのは、テストの実行後、自分が持っているものを分析し、必要に応じて修正したいだけだからです(後でuncomment driver.quit()にします)。同時に、ドライバーを閉じずに呼び出すたびに、RAMが私のPCに影響を及ぼします(テスト後、ブラウザーを手動で閉じたかどうかは関係ありません):-
だから、質問です:「geckodriver」のプロセス(より正確には-taskmgrのgeckodriver.exeプロセスを閉じるsmthを実行します)を閉じる方法はありますが、テストの終了後にブラウザーを閉じませんか?たとえば、テスト自体に何らかのメソッドを追加するなど、これは私の作業/テスト自体には影響しません。最適化を追加したいだけです。
あなたの質問によると、コメントアウトdriver.quit()
だけ_Not to close firefox window after each run, because I just want to analyse what I have
_は、ベストプラクティスの一部ではありません。
詳細な分析の場合、ログエントリを作成してスナップショットを取得できます。
Selenium
を使用して自動化しているときに、ベストプラクティスに従って、quit()
メソッドがtearDown() {}
内にあります。 quit()
DELETE
sを呼び出して、現在のブラウジングセッションを送信 "quit"で呼び出していますコマンドに{"flags":["eForceQuit"]}を指定して、最後に[〜#〜] get [〜#〜]リクエスト/ shutdownEndPoint
。以下に例を示します。
_1503397488598 webdriver::server DEBUG -> DELETE /session/8e457516-3335-4d3b-9140-53fb52aa8b74
1503397488607 geckodriver::marionette TRACE -> 37:[0,4,"quit",{"flags":["eForceQuit"]}]
1503397488821 webdriver::server DEBUG -> GET /shutdown
_
したがって、quit()
メソッドを呼び出すと、_Web Browser
_セッションとWebDriver
インスタンスが完全に終了します。したがって、オーバーヘッドとなる追加の手順を組み込む必要はありません。
それでも実行したい場合は、ダングリングWebDriver
インスタンスをkillしてください。 _GeckoDriver.exe
_インスタンス次のコードブロックのいずれかを使用して、ダングリングWebDriver
インスタンスを強制終了できます。
Javaソリューション(WindowsOS固有):
_import Java.io.IOException;
public class Kill_ChromeDriver_GeckoDriver_IEDriverserver
{
public static void main(String[] args) throws Exception
{
Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe /T");
Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe /T");
Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer.exe /T");
}
}
_
Pythonソリューション(WindowsOS固有):
_import os
os.system("taskkill /f /im geckodriver.exe /T")
os.system("taskkill /f /im chromedriver.exe /T")
os.system("taskkill /f /im IEDriverServer.exe /T")
_
Pythonソリューション(クロスプラットフォーム):
_import os
import psutil
PROCNAME = "geckodriver" # or chromedriver or IEDriverServer
for proc in psutil.process_iter():
# check whether the process name matches
if proc.name() == PROCNAME:
proc.kill()
_