2016-08-18 3 views
0

각도기 테스트를 실행 한 후에 chromedriver.exe를 실행 한 상태로있을 수 있습니다. 간단한 질문은 : 어떻게 그것을 죽일 수 있습니까? 나는 여러 가지 다른 chromedrivers가 실행 될 수 있기 때문에 단지 프로세스 이름을 기반으로 죽일 수 및 기타 시험에 의해 요구 될 수있다크롬 드라이버를 죽이는 방법

  1. : 여기에 여러 가지주의 할 사항이 있습니다. 해야

  2. 나는 이미 내가 chromedriver가 포트 33107에서 수신 대기중인 것으로 나타났습니다

  3. 이 (어떻게 든이 포트를 지정할 수 있습니다?) "http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer 컬"을 사용하여 셀레늄 서버를 중지,하지만 난 방법을 모르는 나는 그것을 끊기 위해 부른다.

  4. 필자는 아마도 내 테스트에서 driver.quit()을 사용해야하지만 때로는 호출이되지 않을 수도 있습니다 (예 : 빌드가 취소 된 경우).

어떤 아이디어가 적절한 chromedriver 프로세스를 명령 줄에서 죽이는 지 (예 : 컬 사용)?

답변

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(); 
} 

편집 : 경우 빌드가 취소 될 때, 당신은 당신이 테스트의 새로운 제품군을 시작하기 전에 실행됩니다 크롬 브라우저와 ChromeDriver의 열려있는 모든 인스턴스를 죽이는 방법을 만들 수 있습니다에 대한 . 예. 사용되는 유닛 테스팅 프레임 워크가 Class Initialize 또는 Assembly Initialize과 비슷하다면 거기에서 테스트 할 수 있습니다. 첫 번째 라인을 무시, 인쇄 - - 그 TCP 포트 (awk 'NR!=1 {print $2}')에서 수신 대기중인 모든 프로세스를 나열 명령

(lsof -i tcp:${PORT_NUMBER})

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

그러나, 다른 게시물에 나는이 방법을 발견 각 줄의 두 번째 열 (xargs kill) - 죽일 인수로 결과를 전달합니다. 몇 가지가있을 수 있습니다. 여기

는 더 정확합니다 : How to find processes based on port and kill them all?

+0

문제는 올바른 인스턴스를 죽일 방법을 정확히 - 다른 동시 실행 할 수있다 빌드 나는 서버에서 모든 인스턴스를 죽일 수 없습니다. –

+0

필자는 내 대답을 업데이트했지만 장기적으로 driver.Quit()를 사용하여보다 안전한 옵션을 고려해야합니다. – Cosmin

관련 문제