$lang['tuto'] = "hướng dẫn"; ?>$lang['tuto'] = "hướng dẫn"; ?> Sử dụng Chrome để khắc phục lỗi tệp

Sử dụng Chrome để khắc phục lỗi tệp DevToolsActivePort trong Selenium trên các tác vụ GitHub

ChromeDriver

Khắc phục lỗi kiểm tra Chrome trong quy trình CI/CD

Chạy thử nghiệm Selenium trong TRÊN nên liền mạch. Tuy nhiên, nhiều nhà phát triển phải đối mặt với lỗi "Tệp DevToolsActivePort không tồn tại" gây khó chịu. Điều này xảy ra khi Chrome, vì lý do này hay lý do khác, không khởi động đúng cách trong môi trường CI.

Thông báo lỗi thường báo hiệu rằng Chrome đang gặp sự cố bất ngờ, nguyên nhân thường là do không khớp Và phiên bản hoặc tùy chọn bị định cấu hình sai trong quá trình thiết lập thử nghiệm. Giống như nhiều nhà phát triển, tôi đã gặp phải thách thức này, đặc biệt khi triển khai các thử nghiệm tự động trong một hệ thống. môi trường.

Trong thiết lập này, sai lệch nhỏ nhất, chẳng hạn như phiên bản ChromeDriver không khớp, có thể khiến quá trình thực thi thử nghiệm bị dừng, gây tốn thời gian và tài nguyên quý giá. May mắn thay, hiểu được các vấn đề cơ bản sẽ giúp giải quyết vấn đề dễ dàng hơn nhiều 🛠️.

Trong hướng dẫn này, chúng tôi sẽ đi sâu vào các bước thực tế để ngăn chặn và khắc phục lỗi phổ biến này. Từ thông tin cụ thể về cài đặt Chrome đến khởi chạy trình điều khiển thích hợp, bạn sẽ tìm thấy quy trình từng bước để đảm bảo quá trình kiểm tra luôn diễn ra suôn sẻ. Hãy giải quyết vấn đề này và đưa bài kiểm tra của bạn trở lại đúng hướng!

Yêu cầu Ví dụ về sử dụng
CHROME_VERSION="117.0.5938.62" Đặt một phiên bản Chrome cụ thể, cần thiết để đảm bảo khả năng tương thích của ChromeDriver trong quá trình kiểm tra CI nhằm ngăn chặn sự không khớp giữa Chrome và ChromeDriver.
MAJOR_VERSION=$(echo $CHROME_VERSION | cut -d '.' -f1) Trích xuất số phiên bản chính từ phiên bản Chrome đầy đủ. Điều này được sử dụng để tải xuống phiên bản ChromeDriver phù hợp, đảm bảo tính tương thích.
LATEST_DRIVER=$(wget -qO- ...) Tìm nạp phiên bản ChromeDriver tương thích mới nhất cho phiên bản Chrome được chỉ định, điều này cần thiết để tránh lỗi “DevToolsActivePort” trong tập lệnh tự động hóa.
if [ -z "$LATEST_DRIVER" ] Kiểm tra xem biến phiên bản ChromeDriver có trống hay không, điều này sẽ cho biết có lỗi khi tìm nạp phiên bản tương thích. Điều kiện này giúp áp dụng dự phòng để ngăn ngừa lỗi kiểm thử.
sudo dpkg -i $CHROME_DEB Cài đặt gói Chrome đã tải xuống bằng dpkg, gói này đặc biệt hữu ích trong các môi trường Linux như GitHub Actions.
sudo rm -f /usr/local/bin/chromedriver Xóa mọi ChromeDriver đã cài đặt trước đó. Điều này đảm bảo không có xung đột phiên bản trong quá trình cài đặt mới.
options.addArguments("--no-sandbox") Tắt tính năng hộp cát của Chrome. Điều này đặc biệt quan trọng trong môi trường CI, vì hộp cát có thể ngăn Chrome khởi động ở chế độ không đầu.
options.addArguments("--disable-dev-shm-usage") Tăng bộ nhớ dùng chung có sẵn bằng cách vô hiệu hóa việc sử dụng /dev/shm, điều này có thể ngăn Chrome gặp sự cố trong các môi trường có bộ nhớ hạn chế, chẳng hạn như vùng chứa.
options.addArguments("--remote-debugging-port=9222") Cho phép gỡ lỗi từ xa trên một cổng được chỉ định. Đây là yêu cầu để Chrome không đầu hoạt động chính xác trong một số môi trường, ngăn ngừa lỗi "DevToolsActivePort".
driver.quit() Đóng tất cả cửa sổ Chrome và kết thúc phiên WebDriver, giải phóng tài nguyên. Điều này rất cần thiết trong quy trình CI/CD để ngăn chặn rò rỉ tài nguyên và tránh hết bộ nhớ khả dụng.

Giải pháp chi tiết cho thiết lập Chrome và ChromeDriver trong CI

Các tập lệnh ở trên được thiết kế để cài đặt và định cấu hình cả Chrome và ChromeDriver trên môi trường, đặc biệt là giải quyết lỗi "Tệp DevToolsActivePort không tồn tại". Sự cố này thường xảy ra khi Chrome chạy ở chế độ không có giao diện người dùng và không thể khởi động đúng cách do không khớp hoặc hạn chế về bộ nhớ. Tập lệnh đầu tiên giải quyết vấn đề này bằng cách chỉ định phiên bản Chrome và đảm bảo khả năng tương thích của nó với ChromeDriver, điều này rất quan trọng để chạy các bài kiểm tra. Các lệnh ban đầu thực hiện cập nhật gói apt và sử dụng wget để tìm nạp phiên bản Google Chrome cụ thể từ máy nhân bản. Việc sử dụng máy nhân bản đảm bảo rằng phiên bản phù hợp được cài đặt, đặc biệt nếu kho lưu trữ mặc định thiếu phiên bản này. Cách tiếp cận này đảm bảo rằng phiên bản Chrome nhất quán được sử dụng trong các lần chạy thử nghiệm khác nhau.

Tiếp theo, tập lệnh tiến hành cài đặt ChromeDriver tương thích với phiên bản bằng cách tách phiên bản chính khỏi Chrome (ví dụ: "117" khỏi "117.0.5938.62") bằng cách sử dụng lệnh để phân tích cú pháp. Điều này cho phép tập lệnh tìm nạp chính xác ChromeDriver cần thiết cho phiên bản chính cụ thể đó bằng cách sử dụng mẫu URL được thiết kế cho các bản phát hành ChromeDriver. Bằng cách đảm bảo các phiên bản này căn chỉnh, quá trình thiết lập sẽ ngăn các phiên bản không khớp gây ra lỗi khởi chạy ChromeDriver, lỗi này thường gây ra lỗi DevTools. Nếu ChromeDriver không tải được phiên bản cụ thể xuống thì tập lệnh sẽ bao gồm tùy chọn dự phòng để tải xuống bản phát hành mới nhất, duy trì tính linh hoạt. Các bước này đặc biệt hữu ích trong quy trình CI/CD tự động, nơi ưu tiên các giải pháp nhanh chóng và đáng tin cậy 🔧.

Sau khi tải xuống, tập lệnh sẽ xóa mọi ChromeDriver đã cài đặt trước đó khỏi hệ thống bằng cách sử dụng “sudo rm -f” để tránh xung đột với các trình điều khiển cũ hơn. Điều này đảm bảo rằng chỉ có phiên bản chính xác được áp dụng, giảm thiểu rủi ro xung đột phiên bản có thể phá vỡ tính ổn định của thử nghiệm. Các quyền dành cho ChromeDriver cũng được đặt thành có thể thực thi được, đây là bước cần thiết để khởi chạy trình điều khiển trong môi trường CI/CD. Sử dụng Chrome ở chế độ "không đầu" với các tùy chọn như "--no-sandbox" và "--disable-dev-shm-usage" cũng làm giảm lượng tiêu thụ tài nguyên của Chrome. Các tùy chọn này cho phép chạy thử nghiệm trong môi trường có tài nguyên hạn chế (ví dụ: máy chủ đám mây hoặc quy trình CI) mà không khiến Chrome gặp sự cố. Đây là một trong những nguyên nhân phổ biến gây ra lỗi DevToolsActivePort.

Cuối cùng, trong quá trình thiết lập WebDriver, các tùy chọn như “--disable-gpu” và “--remote-debugging-port=9222” đảm bảo Chrome chạy ổn định hơn ở chế độ không có đầu. Cờ “--disable-gpu” vô hiệu hóa kết xuất GPU, điều này không cần thiết và đôi khi có vấn đề ở chế độ không đầu. Trong khi đó, tùy chọn “--remote-debugging-port” cho phép Chrome mở một cổng gỡ lỗi cần thiết để Selenium kết nối với cổng đó trong CI. Tóm lại, thiết lập này ngăn chặn các tắc nghẽn tự động hóa phổ biến, tạo ra môi trường thử nghiệm mạnh mẽ và đáng tin cậy hơn. Do đó, các tập lệnh này giúp việc chạy Chrome không có giao diện người dùng trên hệ thống CI/CD trở nên mượt mà hơn nhiều, đảm bảo các bài kiểm tra tự động chạy ổn định mà không gặp trục trặc 🚀.

Giải quyết lỗi "Tệp DevToolsActivePort không tồn tại" trong các thử nghiệm Selenium trên GitHub Actions

Giải pháp 1: Tập lệnh cài đặt và cấu hình cho Chrome và 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

Thiết lập WebDriver bằng Java cho GitHub Actions ở chế độ không đầu

Giải pháp 2: Định cấu hình tùy chọn Chrome và khởi tạo WebDriver trong Java

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

Thêm bài kiểm tra đơn vị để xác minh khả năng tương thích của Chrome và WebDriver

Giải pháp 3: Kiểm tra đơn vị để đảm bảo tính tương thích và ngăn ngừa lỗi trong quá trình thực thi 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();
  }
}

Tối ưu hóa kiểm tra Selenium bằng các hành động GitHub và Chrome không đầu

Một khía cạnh quan trọng của việc chạy với Selenium trong các quy trình CI/CD như GitHub Actions đang hiểu rõ các hạn chế về môi trường. Chạy Chrome ở chế độ không đầu có nghĩa là nó hoạt động mà không có giao diện đồ họa, khiến nó trở nên hoàn hảo cho môi trường CI. Tuy nhiên, Chrome không có đầu có thể nhạy cảm hơn với cấu hình hệ thống và yêu cầu thiết lập bổ sung so với môi trường cục bộ. Lỗi "Tệp DevToolsActivePort không tồn tại" thường liên quan đến lỗi khởi chạy Chrome, thường do hạn chế về bộ nhớ hoặc cấu hình không khớp. Triển khai các cấu hình hiệu quả về bộ nhớ như Và giúp khắc phục những vấn đề này và có thể ổn định đáng kể các thử nghiệm trong môi trường CI/CD bị giới hạn bộ nhớ.

Để đảm bảo khả năng tương thích, điều cần thiết là phải căn chỉnh cả hai phiên bản Chrome và ChromeDriver. Các phiên bản không nhất quán là nguồn lỗi thường xuyên xảy ra trong Tác vụ GitHub, vì trình chạy có thể mặc định sử dụng phiên bản mới nhất và phiên bản này có thể không phù hợp với yêu cầu của ChromeDriver. Để giải quyết vấn đề này, giải pháp của chúng tôi bao gồm phân tích cú pháp phiên bản Chrome chính để tìm nạp phiên bản ChromeDriver chính xác tương ứng, cải thiện tính ổn định. Ngoài ra, thiết lập cho phép ChromeDriver tương tác với trình duyệt một cách đáng tin cậy hơn bằng cách bật cổng giao tiếp. Thiết lập này rất cần thiết khi sử dụng GitHub Actions hoặc các công cụ tương tự để chạy tự động trên một máy ảo.

Những cấu hình này tạo ra sự khác biệt lớn về hiệu quả, giảm lỗi và cải thiện độ tin cậy của các lần chạy thử. Bằng cách đảm bảo các tùy chọn tiết kiệm tài nguyên và sử dụng đúng phiên bản, các hoạt động chạy Chrome không có đầu có nhiều khả năng thực thi thành công hơn, giúp các nhà phát triển không phải xử lý các lỗi khó chịu trong quá trình thử nghiệm. Cuối cùng, cấu hình mạnh mẽ và các phần phụ thuộc tương thích giúp trải nghiệm kiểm tra CI/CD mượt mà hơn, cho phép các nhà phát triển tập trung vào việc tạo và cải thiện ứng dụng của họ mà không bị gián đoạn bởi các vấn đề thiết lập dai dẳng 🚀.

  1. Lỗi "Tệp DevToolsActivePort không tồn tại" nghĩa là gì?
  2. Lỗi này xảy ra khi Chrome không khởi động đúng cách ở chế độ không có đầu, thường là do thiết lập không khớp hoặc thiếu tài nguyên hệ thống. Điều chỉnh các tùy chọn bộ nhớ như thường giải quyết nó.
  3. Tại sao việc kết hợp phiên bản Chrome và ChromeDriver lại quan trọng?
  4. Các phiên bản phù hợp sẽ tránh được lỗi tương thích. sử dụng và tìm nạp ChromeDriver cụ thể để đảm bảo chúng hoạt động trơn tru cùng nhau.
  5. Làm thế nào giúp đỡ trong việc kiểm tra không đầu?
  6. Nó cho phép ChromeDriver kiểm soát một cổng cho Chrome, cho phép các thử nghiệm kết nối với phiên bản trình duyệt hiệu quả hơn và ngăn ngừa lỗi DevTools.
  7. làm gì LÀM?
  8. Điều này sẽ vô hiệu hóa hộp cát của Chrome, giúp Chrome khởi động trong môi trường CI, vì hộp cát đôi khi có thể khiến Chrome không có đầu gặp sự cố trong môi trường bị hạn chế.
  9. Có phương án dự phòng nào nếu phiên bản ChromeDriver không tải xuống được không?
  10. Có, tập lệnh của chúng tôi bao gồm một phương án dự phòng sử dụng nếu phiên bản trùng khớp không thành công, hãy đảm bảo ChromeDriver luôn khả dụng bất kể phiên bản Chrome đã được cài đặt.
  11. Làm cách nào để tránh các sự cố liên quan đến bộ nhớ Chrome trong quy trình CI/CD?
  12. sử dụng chuyển hướng bộ nhớ dùng chung, ngăn chặn sự cố của Chrome do không gian/dev/shm bị giới hạn trong môi trường CI.
  13. Tôi có thể gỡ lỗi Chrome ở chế độ không đầu không?
  14. Có, sử dụng và việc chạy thử nghiệm cục bộ cho phép bạn mở Công cụ dành cho nhà phát triển của Chrome để gỡ lỗi ở chế độ không có giao diện người dùng.
  15. WebDriverManager có tự động xử lý các bản cập nhật ChromeDriver không?
  16. WebDriverManager đơn giản hóa các bản cập nhật trình điều khiển cục bộ, nhưng trong quy trình CI/CD, việc thiết lập các phiên bản cụ thể, như được hiển thị, sẽ đáng tin cậy hơn cho các bản dựng lặp lại.
  17. Mục đích của việc này là gì trong kịch bản?
  18. Lệnh này giải phóng tài nguyên bằng cách đóng Chrome và kết thúc phiên WebDriver, ngăn chặn rò rỉ bộ nhớ trong môi trường CI/CD.
  19. Làm cách nào để kiểm tra thiết lập Selenium của tôi trên GitHub Actions trước khi cam kết?
  20. Chạy thử nghiệm cục bộ với các tùy chọn và cấu hình CI có thể phát hiện sự cố trước khi chuyển sang GitHub, giúp việc gỡ lỗi trở nên dễ dàng hơn.
  21. Tôi cần những quyền gì đối với ChromeDriver trong CI?
  22. ChromeDriver yêu cầu quyền thực thi, được đặt bởi , để chạy thử nghiệm thành công trong GitHub Actions.

Đảm bảo thiết lập chính xác cho các thử nghiệm Selenium bằng Chrome không có giao diện người dùng trên GitHub Actions giúp tiết kiệm thời gian và tăng độ tin cậy. Việc giải quyết các lỗi như “Tệp DevToolsActivePort không tồn tại” có thể giúp việc kiểm tra CI/CD trở nên liền mạch hơn và ít gây khó chịu hơn cho các nhà phát triển.

Bằng cách căn chỉnh và Chrome cũng như định cấu hình các tùy chọn tiết kiệm bộ nhớ, phương pháp này giúp chạy thử nghiệm hiệu quả trong các môi trường bị hạn chế. Đó là một giải pháp thiết thực cho phép các nhà phát triển tập trung vào nhiệm vụ cốt lõi của họ mà không phải lo lắng về việc gián đoạn thử nghiệm 🚀.

  1. Hướng dẫn khắc phục sự cố chi tiết về cách xử lý các sự cố DevToolsActivePort trong môi trường Chrome dành cho CI/CD không có giao diện. Tài liệu về Selenium WebDriver
  2. Hướng dẫn cài đặt và cấu hình toàn diện cho các phiên bản Chrome và ChromeDriver trong thiết lập tích hợp liên tục, được cung cấp bởi Tài liệu hành động GitHub
  3. Giải pháp từng bước cho các tùy chọn thiết lập, tương thích và cấu hình ChromeDriver có sẵn trong Tài liệu WebDriverManager
  4. Tài liệu tham khảo về các phương pháp hay nhất để định cấu hình Chrome không có giao diện người dùng nhằm đạt hiệu quả bộ nhớ trong CI/CD, đặc biệt là trong các môi trường bị hạn chế. Đọc thêm tại Hướng dẫn dành cho nhà phát triển Google Chrome