2016-08-18 134 views
0

運行我的量角器測試後,我可能會留下chromedriver.exe運行。簡單的問題是:我如何殺死它?有幾件事情,這裏要注意:如何殺死chromedriver

  1. 我不能殺了基於過程的名稱,因爲其他幾個chromedrivers可能正在運行,並且可以通過其他測試是必要的。

  2. 我使用「捲曲http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer

  3. 我注意到chromedriver在端口33107監聽(是否有可能以某種方式指定此端口?)已經停止硒服務器,但我不知道應該怎樣我叫它退出。

  4. 也許我應該在我的測試中使用driver.quit(),但在某些情況下它可能不會被調用(例如構建被取消時)。

任何想法如何從命令行中殺死正確的chromedriver進程(例如使用curl)?

回答

0

正確的做法正如您在測試中使用driver.quit()所述。實際上,確切地說是在你的測試清理方法中,因爲你每次都想要一個新的瀏覽器實例。 現在,一些單元測試框架(例如MSTest)的問題是,如果您的測試初始化​​方法失敗,則不會調用測試清理方法。 作爲解決方法,您可以圍繞在try-catch聲明您測試初始化​​與catch調用和執行您的測試清理。

public void TestInitialize() 
{ 
    try 
    { 
     //your test initialize statements 
    } 
    catch 
    { 
     TestCleanup(); 
     //throw exception or log the error message or whatever else you need 
    } 
} 
public void TestCleanup() 
{ 
    driver.Quit(); 
} 

編輯: 因爲當建造被取消,您可以創建殺死Chrome瀏覽器和ChromeDriver開始測試新套件之前被執行的所有打開的實例的方法的情況下。 例如如果你使用的單元測試框架有類似於Class InitializeAssembly Initialize的東西,你可以在那裏做。

然而,在不同的文章中,我發現這種方法:

PORT_NUMBER=1234 lsof -i tcp:${PORT_NUMBER} | awk 'NR!=1 {print $2}' | xargs kill 命令

(lsof -i tcp:${PORT_NUMBER})的故障 - 列出的TCP端口 (awk 'NR!=1 {print $2}')監聽所有進程 - 忽略第一行,打印每行的第二列 (xargs kill) - 將結果作爲參數傳遞給kill。可能有幾個。

這裏,更精確地說:How to find processes based on port and kill them all?

+0

的問題是,究竟是如何殺死正確的情況下 - 我不能殺死所有實例的服務器作爲其他併發版本可能運行。 –

+0

我已經更新了我的答案,但從長遠來看,您應該考慮更安全的選項,使用driver.Quit()來完成。 – Cosmin