Chrome을 사용하여 GitHub Actions의 Selenium에서 DevToolsActivePort 파일 오류 수정

Chrome을 사용하여 GitHub Actions의 Selenium에서 DevToolsActivePort 파일 오류 수정
Chrome을 사용하여 GitHub Actions의 Selenium에서 DevToolsActivePort 파일 오류 수정

CI/CD 파이프라인에서 Chrome 테스트 실패 극복

Selenium 테스트 실행 헤드리스 크롬 ~에 GitHub 작업 원활해야합니다. 그러나 많은 개발자들은 실망스러운 "DevToolsActivePort 파일이 존재하지 않습니다." 오류에 직면합니다. 이는 어떤 이유로든 Chrome이 CI 환경에서 제대로 시작되지 않을 때 발생합니다.

오류 메시지는 일반적으로 Chrome이 예기치 않게 충돌하고 있음을 나타냅니다. 이는 종종 불일치의 결과입니다. 크롬 그리고 ChromeDriver 테스트 설정의 버전 또는 잘못 구성된 옵션. 많은 개발자와 마찬가지로 저는 특히 자동화된 테스트를 배포할 때 이러한 문제에 직면했습니다. 지속적인 통합 환경.

이 설정에서는 ChromeDriver 버전 불일치와 같은 아주 작은 정렬 오류로 인해 테스트 실행이 중단되어 귀중한 시간과 리소스가 낭비될 수 있습니다. 다행히도 근본적인 문제를 이해하면 문제를 훨씬 쉽게 해결할 수 있습니다 🛠️.

이 가이드에서는 이러한 일반적인 오류를 예방하고 해결하기 위한 실제 단계를 자세히 살펴보겠습니다. Chrome 설치 세부 사항부터 적절한 드라이버 초기화까지 매번 원활한 테스트 실행을 보장하는 단계별 프로세스를 찾을 수 있습니다. 이 문제를 해결하고 테스트를 다시 정상화해 보세요!

명령 사용예
CHROME_VERSION="117.0.5938.62" Chrome과 ChromeDriver 간의 불일치를 방지하기 위해 CI 테스트 중에 ChromeDriver 호환성을 보장하는 데 필수적인 특정 Chrome 버전을 설정합니다.
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) 전체 Chrome 버전에서 주요 버전 번호를 추출합니다. 이는 호환성을 보장하기 위해 일치하는 버전의 ChromeDriver를 다운로드하는 데 사용됩니다.
LATEST_DRIVER=$(wget -qO- ...) 자동화 스크립트에서 'DevToolsActivePort' 오류를 방지하는 데 필수적인 지정된 Chrome 버전에 대해 호환되는 최신 ChromeDriver 버전을 가져옵니다.
if [ -z "$LATEST_DRIVER" ] ChromeDriver 버전 변수가 비어 있는지 확인합니다. 이는 호환되는 버전을 가져오는 중 오류가 발생했음을 나타냅니다. 이 조건은 테스트 실패를 방지하기 위해 폴백을 적용하는 데 도움이 됩니다.
sudo dpkg -i $CHROME_DEB GitHub Actions와 같은 Linux 환경에서 특히 유용한 dpkg를 사용하여 다운로드한 Chrome 패키지를 설치합니다.
sudo rm -f /usr/local/bin/chromedriver 이전에 설치된 ChromeDriver를 삭제합니다. 이렇게 하면 새로 설치하는 동안 버전 충돌이 발생하지 않습니다.
options.addArguments("--no-sandbox") Chrome 샌드박싱 기능을 비활성화합니다. 샌드박스를 사용하면 Chrome이 헤드리스 모드에서 시작되는 것을 방지할 수 있으므로 이는 CI 환경에서 특히 중요합니다.
options.addArguments("--disable-dev-shm-usage") 컨테이너와 같이 메모리가 제한된 환경에서 Chrome 충돌을 방지할 수 있는 /dev/shm 사용을 비활성화하여 사용 가능한 공유 메모리를 늘립니다.
options.addArguments("--remote-debugging-port=9222") 지정된 포트에서 원격 디버깅을 활성화합니다. 이는 헤드리스 Chrome이 일부 환경에서 올바르게 작동하여 'DevToolsActivePort' 오류를 방지하기 위한 요구 사항입니다.
driver.quit() 모든 Chrome 창을 닫고 WebDriver 세션을 종료하여 리소스를 확보합니다. 이는 CI/CD 파이프라인에서 리소스 누출을 방지하고 사용 가능한 메모리 부족을 방지하는 데 필수적입니다.

CI의 Chrome 및 ChromeDriver 설정을 위한 세부 솔루션

위의 스크립트는 Chrome과 ChromeDriver를 모두 설치하고 구성하도록 설계되었습니다. GitHub 작업 특히 "DevToolsActivePort 파일이 존재하지 않습니다." 오류를 해결합니다. 이 문제는 일반적으로 헤드리스 모드에서 실행되는 Chrome이 불일치 또는 메모리 제약으로 인해 제대로 시작되지 않을 때 발생합니다. 첫 번째 스크립트는 Chrome 버전을 지정하고 실행에 중요한 ChromeDriver와의 호환성을 보장하여 이 문제를 해결합니다. 셀렌 테스트. 초기 명령은 apt 패키지 업데이트를 수행하고 wget을 사용하여 미러에서 특정 버전의 Google Chrome을 가져옵니다. 미러를 사용하면 특히 기본 저장소에 이 버전이 없는 경우 올바른 버전이 설치됩니다. 이 접근 방식은 다양한 테스트 실행에서 일관된 Chrome 버전이 사용되도록 보장합니다.

다음으로, 스크립트는 구문 분석 명령을 사용하여 Chrome에서 주요 버전(예: "117.0.5938.62"에서 "117")을 분리하여 버전 호환 ChromeDriver 설치를 진행합니다. 이를 통해 스크립트는 ChromeDriver 릴리스용으로 설계된 URL 패턴을 사용하여 특정 주요 버전에 필요한 정확한 ChromeDriver를 가져올 수 있습니다. 이러한 버전이 일치하는지 확인함으로써 일치하지 않는 버전으로 인해 DevTools 오류가 자주 발생하는 ChromeDriver 초기화 오류가 발생하는 것을 방지할 수 있습니다. ChromeDriver가 특정 버전을 다운로드하지 못하는 경우 스크립트에는 최신 릴리스를 다운로드하여 유연성을 유지하는 대체 옵션이 포함됩니다. 이러한 단계는 빠르고 안정적인 솔루션이 우선시되는 자동화된 CI/CD 파이프라인에 특히 유용합니다 🔧.

다운로드 후 스크립트는 이전 드라이버와의 충돌을 피하기 위해 "sudo rm -f"를 사용하여 시스템에서 이전에 설치된 ChromeDriver를 삭제합니다. 이렇게 하면 올바른 버전만 유지되므로 테스트 안정성을 방해할 수 있는 버전 충돌 위험이 최소화됩니다. ChromeDriver에 대한 권한도 실행 가능하도록 설정되어 있으며 이는 CI/CD 환경에서 드라이버를 시작하는 데 필요한 단계입니다. '--no-sandbox' 및 '--disable-dev-shm-usage'와 같은 옵션을 사용하여 '헤드리스' 모드에서 Chrome을 사용하면 Chrome의 리소스 사용량도 줄어듭니다. 이러한 옵션을 사용하면 DevToolsActivePort 오류의 일반적인 원인 중 하나인 Chrome 충돌을 일으키지 않고 제한된 리소스(예: 클라우드 서버 또는 CI 파이프라인)가 있는 환경에서 테스트를 실행할 수 있습니다.

마지막으로 WebDriver 설정에서 "--disable-gpu" 및 "--remote-debugging-port=9222"와 같은 옵션은 헤드리스 모드에서 Chrome이 보다 안정적으로 실행되도록 보장합니다. "--disable-gpu" 플래그는 GPU 렌더링을 비활성화하는데, 이는 불필요하며 헤드리스 모드에서 문제가 되는 경우도 있습니다. 한편, "--remote-debugging-port" 옵션을 사용하면 Chrome이 Selenium이 CI에서 연결하는 데 필수적인 디버깅 포트를 열 수 있습니다. 요약하면, 이 설정은 일반적인 자동화 병목 현상을 방지하여 보다 안정적이고 강력한 테스트 환경을 가능하게 합니다. 결과적으로 이러한 스크립트를 사용하면 CI/CD 시스템에서 헤드리스 Chrome을 훨씬 더 원활하게 실행할 수 있어 자동화된 테스트가 문제 없이 일관되게 실행되도록 할 수 있습니다 🚀.

GitHub Actions의 Selenium 테스트에서 "DevToolsActivePort 파일이 존재하지 않습니다" 오류 해결

해결 방법 1: Chrome 및 ChromeDriver용 설치 및 구성 스크립트

sudo apt-get update
sudo apt-get install -y wget apt-transport-https curl
CHROME_VERSION="117.0.5938.62"
CHROME_DEB="google-chrome-stable_${CHROME_VERSION}-1_amd64.deb"
wget https://mirror.cs.uchicago.edu/google-chrome/pool/main/g/google-chrome-stable/$CHROME_DEB
sudo dpkg -i $CHROME_DEB || sudo apt-get install -f -y
# Install ChromeDriver matching Chrome
sudo apt-get install -y wget unzip
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1)
LATEST_DRIVER=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$MAJOR_VERSION)
if [ -z "$LATEST_DRIVER" ]; then
  echo "Falling back to latest ChromeDriver version."
  LATEST_DRIVER=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE)
fi
sudo rm -f /usr/local/bin/chromedriver
wget https://chromedriver.storage.googleapis.com/$LATEST_DRIVER/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver

헤드리스 모드에서 GitHub Actions용 ​​Java를 사용하여 WebDriver 설정

해결 방법 2: Chrome 옵션 구성 및 Java에서 WebDriver 초기화

// Import necessary libraries
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import io.github.bonigarcia.wdm.WebDriverManager;
// Set up ChromeDriver
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--remote-debugging-port=9222");
ChromeDriver driver = new ChromeDriver(options);
// Start Selenium test logic here
driver.quit();

Chrome 및 WebDriver 호환성을 확인하기 위한 단위 테스트 추가

솔루션 3: CI 실행 중 호환성을 보장하고 오류를 방지하기 위한 단위 테스트

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
class WebDriverTests {
  private WebDriver driver;
  @BeforeEach
  void setUp() {
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless");
    options.addArguments("--no-sandbox");
    driver = new ChromeDriver(options);
  }
  @Test
  void testDriverInitialization() {
    driver.get("https://www.google.com");
    assertEquals("Google", driver.getTitle());
  }
  @AfterEach
  void tearDown() {
    driver.quit();
  }
}

GitHub Actions 및 Headless Chrome을 사용하여 Selenium 테스트 최적화

달리기의 중요한 측면 중 하나 헤드리스 크롬 GitHub Actions와 같은 CI/CD 파이프라인에서 Selenium을 사용하면 환경적 제약을 이해하게 됩니다. Chrome을 헤드리스 모드로 실행하면 그래픽 인터페이스 없이 작동하므로 CI 환경에 적합합니다. 그러나 헤드리스 Chrome은 시스템 구성에 더 민감할 수 있으며 로컬 환경에 비해 추가 설정이 필요합니다. "DevToolsActivePort 파일이 존재하지 않습니다"라는 오류는 일반적으로 메모리 제약이나 구성 불일치로 인해 Chrome 초기화 실패와 연결됩니다. 다음과 같은 메모리 효율적인 구성 구현 --disable-dev-shm-사용 그리고 --샌드박스 없음 이러한 문제를 극복하는 데 도움이 되며 메모리가 제한된 CI/CD 환경에서 테스트를 크게 안정화할 수 있습니다.

호환성을 보장하려면 Chrome과 ChromeDriver 버전을 모두 일치시키는 것이 중요합니다. 일관성 없는 버전은 GitHub Actions에서 오류가 자주 발생하는 원인입니다. 실행기가 기본적으로 ChromeDriver 요구 사항과 일치하지 않는 최신 버전을 사용할 수 있기 때문입니다. 이 문제를 해결하기 위해 우리의 솔루션에는 주요 Chrome 버전을 구문 분석하여 해당하는 정확한 ChromeDriver 버전을 가져와 안정성을 향상시키는 작업이 포함되어 있습니다. 추가적으로 설정 원격 디버깅 포트 통신 포트를 활성화하면 ChromeDriver가 브라우저와 더욱 안정적으로 상호작용할 수 있습니다. 이 설정은 GitHub Actions 또는 유사한 도구를 사용하여 자동화된 실행을 실행할 때 필수적입니다. 브라우저 테스트 가상 머신에서.

이러한 구성은 효율성에 큰 차이를 가져오며 오류를 줄이고 테스트 실행의 신뢰성을 향상시킵니다. 리소스 효율적인 옵션을 보장하고 올바른 버전을 사용함으로써 헤드리스 Chrome 실행이 훨씬 더 성공적으로 실행될 가능성이 높아져 개발자가 테스트 중에 당황스러운 오류를 처리하지 않아도 됩니다. 궁극적으로 강력한 구성과 호환 가능한 종속성은 CI/CD 테스트 환경을 더욱 원활하게 만들어 개발자가 지속적인 설정 문제로 인한 중단 없이 애플리케이션을 만들고 개선하는 데 집중할 수 있게 해줍니다 🚀.

GitHub Actions에서 Chrome을 사용하여 Selenium을 실행하는 데 대한 일반적인 질문 및 솔루션

  1. "DevToolsActivePort 파일이 존재하지 않습니다"라는 오류는 무엇을 의미합니까?
  2. 이 오류는 일반적으로 설정 불일치 또는 시스템 리소스 부족으로 인해 Chrome이 헤드리스 모드에서 제대로 시작되지 않을 때 발생합니다. 다음과 같은 메모리 옵션 조정 --disable-dev-shm-usage 해결하는 경우가 많습니다.
  3. Chrome과 ChromeDriver 버전을 일치시키는 것이 왜 중요한가요?
  4. 버전을 일치시키면 호환성 오류가 방지됩니다. 사용 MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) 특정 ChromeDriver를 가져오면 서로 원활하게 작동합니다.
  5. 어떻게 --remote-debugging-port=9222 헤드리스 테스트에 도움이 되나요?
  6. ChromeDriver로 Chrome용 포트를 제어할 수 있으므로 테스트를 통해 브라우저 인스턴스에 보다 효과적으로 연결하고 DevTools 오류를 방지할 수 있습니다.
  7. 무엇을 --no-sandbox 하다?
  8. 이렇게 하면 CI 환경에서 Chrome을 시작하는 데 도움이 되는 Chrome의 샌드박싱이 비활성화됩니다. 샌드박싱으로 인해 제한된 환경에서 헤드리스 Chrome이 충돌하는 경우가 있을 수 있기 때문입니다.
  9. ChromeDriver 버전을 다운로드하지 못한 경우 대체 방법이 있나요?
  10. 예, 우리 스크립트에는 다음을 사용하는 대체 기능이 포함되어 있습니다. --latest_release 일치하는 버전이 실패하면 설치된 Chrome 버전에 관계없이 ChromeDriver를 사용할 수 있는지 확인합니다.
  11. CI/CD 파이프라인에서 Chrome 메모리 관련 문제를 방지하려면 어떻게 해야 하나요?
  12. 사용 --disable-dev-shm-usage 공유 메모리를 리디렉션하여 CI 환경의 제한된 /dev/shm 공간으로 인한 Chrome 충돌을 방지합니다.
  13. 헤드리스 모드에서 Chrome을 디버깅할 수 있나요?
  14. 예, 사용 중입니다 --remote-debugging-port 로컬에서 테스트를 실행하면 헤드리스 모드에서 디버깅을 위해 Chrome DevTools를 열 수 있습니다.
  15. WebDriverManager는 ChromeDriver 업데이트를 자동으로 처리합니까?
  16. WebDriverManager는 로컬에서 드라이버 업데이트를 단순화하지만 CI/CD 파이프라인에서는 표시된 대로 특정 버전을 설정하는 것이 반복 가능한 빌드에 더 안정적입니다.
  17. 목적은 무엇입니까? driver.quit() 대본에서?
  18. 이 명령은 Chrome을 닫고 WebDriver 세션을 종료하여 리소스를 해제하여 CI/CD 환경에서 메모리 누수를 방지합니다.
  19. 커밋하기 전에 GitHub Actions에서 Selenium 설정을 어떻게 테스트합니까?
  20. 로컬에서 테스트 실행 headless 옵션 및 CI 구성은 GitHub로 푸시하기 전에 문제를 포착할 수 있으므로 디버깅이 더 쉬워집니다.
  21. CI의 ChromeDriver에는 어떤 권한이 필요합니까?
  22. ChromeDriver에는 다음에 의해 설정된 실행 권한이 필요합니다. sudo chmod +x /usr/local/bin/chromedriver, GitHub Actions에서 테스트를 성공적으로 실행합니다.

CI/CD 테스트를 위한 헤드리스 Chrome 구성에 대한 최종 생각

GitHub Actions에서 헤드리스 Chrome을 사용하여 Selenium 테스트를 올바르게 설정하면 시간이 절약되고 안정성이 향상됩니다. "DevToolsActivePort 파일이 존재하지 않습니다"와 같은 오류를 해결하면 CI/CD 테스트가 더욱 원활해지고 개발자의 좌절감을 줄일 수 있습니다.

정렬하여 ChromeDriver 및 Chrome 버전을 사용하고 메모리 효율적인 옵션을 구성하면 이 접근 방식은 제한된 환경에서 테스트를 효율적으로 실행하는 데 도움이 됩니다. 개발자가 테스트 중단에 대한 걱정 없이 핵심 작업에 집중할 수 있게 해주는 실용적인 솔루션입니다 🚀.

Selenium 및 ChromeDriver 문제 해결을 위한 참고 자료 및 소스 자료
  1. CI/CD 환경용 헤드리스 Chrome에서 DevToolsActivePort 문제를 처리하는 방법에 대한 자세한 문제 해결 가이드입니다. Selenium WebDriver 문서
  2. 지속적인 통합 설정에서 Chrome 및 ChromeDriver 버전에 대한 포괄적인 설치 및 구성 지침이 제공됩니다. GitHub 작업 문서
  3. ChromeDriver 설정, 호환성 및 구성 옵션에 대한 단계별 솔루션은 다음에서 사용할 수 있습니다. WebDriverManager 문서
  4. 특히 제한된 환경에서 CI/CD의 메모리 효율성을 위해 헤드리스 Chrome을 구성하는 모범 사례에 대한 참조입니다. 자세한 내용은 다음에서 확인하세요. Google 크롬 개발자 가이드