Trả lời

6

PhantomJS có một lựa chọn remote-debugger-port bạn có thể sử dụng để gỡ lỗi script casper của bạn trong các công cụ dev Chrome. Để sử dụng nó, bạn chỉ cần thực hiện kịch bản casper của bạn với lập luận này:

casperjs test script.js --remote-debugger-port=9000

Sau đó, mở ra http://localhost:9000 trong Chrome và nhấp vào liên kết about:blank mà trình bày chính nó. Sau đó, bạn sẽ tìm thấy chính mình trong lãnh thổ công cụ dành cho nhà phát triển Chrome quen thuộc.

Do đây là một kịch bản và không phải là một trang web, để bắt đầu gỡ lỗi, bạn phải làm một trong hai điều trước khi kịch bản của bạn sẽ thực hiện:

  1. Trong trang công cụ dev Chrome, mở điều khiển và thực thi __run() đến thực sự bắt đầu tập lệnh của bạn.
  2. Chèn một dòng debugger; vào mã của bạn và chạy tập lệnh casper của bạn với đối số --remote-debugger-autorun=yes bổ sung. Làm như vậy với trang gỡ lỗi từ xa mở sẽ chạy tập lệnh cho đến khi nó chạm vào dòng debugger; của bạn.

Có một tuyệt vời tutorial giải thích điều này rất độc đáo.

15

Tôi đã không giải quyết điều này hoàn toàn, nhưng tôi chắc chắn làm giảm cơn đau.

PhantomJS cung cấp command line argument để bật webkit's remote debugger. AFAIK, PhantomJS khởi chạy máy chủ và đưa tập lệnh vào <head> của trang web bằng trình gỡ lỗi trong trình duyệt quen thuộc. Nó thực sự khá tốt đẹp, với breakpoints, vv Tuy nhiên, chuyển sang đào thủ công xung quanh trong thiết bị đầu cuối cho một tham số dòng lệnh ngẫu nhiên và đường dẫn đến kịch bản của bạn là nghiêm trọng khó chịu.

Vì vậy, tôi đã sử dụng tính năng "công cụ bên ngoài" của IntelliJ để khởi chạy tập lệnh Bash làm chết bất kỳ phiên gỡ lỗi nào trước đó, khởi chạy PhantomJS và sau đó mở trang trong Chrome.

#!/bin/bash 

lsof -i [email protected]:9000 #list anything bound to port 9000 
if [ $? -eq 0 ] #if something was listed 
    then 
     killall 'phantomjs' 
fi 

/usr/local/Cellar/phantomjs/2.0.0/bin/phantomjs --remote-debugger-port=9000 $1 & 
# --remote-debugger-autorun=yes <- use if you have added 'debugger;' break points 
# replace $1 with full path if you don't pass it as a variable. 

sleep 2; #give phantomJS time to get started 

open -a /Applications/Google\ Chrome.app http://localhost:9000 & #linux has a different 'open' command 
# alt URL if you want to skip the page listing 
# http://localhost:9000/webkit/inspector/inspector.html?page=1 

#see also 
#github.com/ariya/phantomjs/wiki/Troubleshooting 

Một vài dòng tiếp theo là cài đặt cho IntelliJ, mặc dù mã trên hoạt động tốt trên mọi nền tảng/IDE.

chương trình: $ProjectFileDir$/path/to/bash/script.sh
thông số: $FilePath$
dir làm việc: $ProjectFileDir$

+0

Trong Chrome, đó là --remote-debugging-port, không phải --remrem-debugger-port. Đó cũng là lá cờ trong bài viết trên webkit. Bạn có thể muốn kiểm tra kỹ xem cờ có đúng không. –

+0

Không, đó là [chắc chắn] (https://github.com/ariya/phantomjs/wiki/Troubleshooting#remote-debugging) '--remote-debugger-port = 9000' – Indolering

+3

Trong khi câu trả lời này đã cho tôi rất nhiều điểm internet , Tôi muốn xem một giải pháp * REAL * cho điều này đôi khi và tôi sẽ rất vui khi trao giải đáp cho bất cứ ai có thể đăng nó! – Indolering

Các vấn đề liên quan