2013-08-15 47 views
17

Tôi muốn tạo thử nghiệm tự động hóa, vì vậy tôi phải biết các lỗi xuất hiện trong bảng điều khiển của chrome.Nhận nhật ký bảng điều khiển của chrome

có tùy chọn để nhận các dòng lỗi xuất hiện trong bảng điều khiển?

Để xem bảng điều khiển: nhấp chuột phải vào một nơi nào đó trong trang, nhấp vào "kiểm tra phần tử" và sau đó chuyển đến "bảng điều khiển".

+2

Điều này có hữu ích không? http://stackoverflow.com/questions/5056737/getting-data-from-the-browsers-console-using-javascript –

Trả lời

26

Tôi không biết C# nhưng đây là mã Java mà không được công việc, tôi hy vọng bạn có thể dịch nó vào C#

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.logging.LogEntries; 
import org.openqa.selenium.logging.LogEntry; 
import org.openqa.selenium.logging.LogType; 
import org.openqa.selenium.logging.LoggingPreferences; 
import org.openqa.selenium.remote.CapabilityType; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.testng.annotations.AfterMethod; 
import org.testng.annotations.BeforeMethod; 
import org.testng.annotations.Test; 

public class ChromeConsoleLogging { 
    private WebDriver driver; 


    @BeforeMethod 
    public void setUp() { 
     System.setProperty("webdriver.chrome.driver", "c:\\path\\to\\chromedriver.exe");   
     DesiredCapabilities caps = DesiredCapabilities.chrome(); 
     LoggingPreferences logPrefs = new LoggingPreferences(); 
     logPrefs.enable(LogType.BROWSER, Level.ALL); 
     caps.setCapability(CapabilityType.LOGGING_PREFS, logPrefs); 
     driver = new ChromeDriver(caps); 
    } 

    @AfterMethod 
    public void tearDown() { 
     driver.quit(); 
    } 

    public void analyzeLog() { 
     LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER); 
     for (LogEntry entry : logEntries) { 
      System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage()); 
      //do something useful with the data 
     } 
    } 

    @Test 
    public void testMethod() { 
     driver.get("http://mypage.com"); 
     //do something on page 
     analyzeLog(); 
    } 
} 

chú ý đến phương pháp thiết lập trong đoạn code trên. Chúng tôi sử dụng đối tượng LoggingPreferences để cho phép ghi nhật ký. Có một vài loại nhật ký, nhưng nếu bạn muốn theo dõi lỗi giao diện điều khiển thì LogType.BROWSER là một trong những loại mà bạn nên sử dụng. Sau đó, chúng tôi chuyển đối tượng đó cho DesiredCapabilities và hơn thế nữa với trình tạo và thông báo của ChromeDriver - chúng tôi có phiên bản ChromeDriver với tính năng ghi nhật ký được bật.

Sau khi thực hiện một số hành động trên trang, chúng tôi gọi phương thức analysisLog(). Ở đây chúng tôi chỉ cần trích xuất nhật ký và lặp qua các mục nhập của nó. Ở đây bạn có thể đặt xác nhận hoặc thực hiện bất kỳ báo cáo nào khác mà bạn muốn.

Cảm hứng của tôi là this code by Michael Klepikov giải thích cách trích xuất nhật ký hiệu suất từ ​​ChromeDriver.

+7

Trong khi đây là câu trả lời đúng cho Java, như bạn chỉ ra, nó không phải là C# và sẽ không hoạt động cho C# một lần "dịch" vì .NET API của Selenium * không * hỗ trợ nhật ký. Như trong, khi bạn làm 'Driver.Manage()', '.Logs()' sẽ không có sẵn. 1 anyway, vì nó cho thấy giải pháp. – Arran

+0

Vẫn không có cách nào để nhận nhật ký Trình duyệt trong C#? –

+0

Tôi không chắc tại sao [issue 6832] (https://code.google.com/p/selenium/issues/detail?id=6832) vẫn mở, nhưng hiện tại '.Logs' hoạt động. Chúng tôi có WebDriver phiên bản 2.21, có lẽ là – mazharenko

1

Theo issue 6832 ghi nhật ký chưa được triển khai cho các ràng buộc C#. Vì vậy, có thể không phải là một cách dễ dàng để có được điều này làm việc như bây giờ.

12

Bạn có thể nhận các bản ghi theo cách này:

Driver().Manage().Logs.GetLog(); 

Bằng cách xác định những gì log bạn quan tâm đến bạn có thể nhận được các bản ghi của trình duyệt, đó là:

Driver().Manage().Logs.GetLog(LogType.Browser); 

Cũng nên nhớ để thiết lập điều khiển của bạn cho phù :

ChromeOptions options = new ChromeOptions(); 
options.SetLoggingPreference(LogType.Browser, LogLevel.All); 
driver = new ChromeDriver("path to driver", options); 
+0

Xin chào! Nó không làm việc cho tôi, bạn có thể vui lòng [kiểm tra vấn đề của tôi] (http://stackoverflow.com/questions/37027989/cant-get-proper-console-logs-from-webdriver-chrome-c)? Cảm ơn! –

+0

@BlackHat Xin lỗi vì đã trả lời muộn! Tôi đã cập nhật câu trả lời của mình với thông tin từ chuỗi của bạn. –

+0

Tôi không phải thiết lập cơ chế đăng nhập khi khởi động trình điều khiển và 'Trình điều khiển() .Quản lý() Logs.GetLog (LogType.Browser);' đã cho tôi LogEntries chứa lỗi – Tarun

2

Đây là mã C# để ghi nhật ký máy in từ chrome.

private void CheckLogs() 
    { 
     List<LogEntry> logs = Driver.Manage().Logs.GetLog(LogType.Browser).ToList(); 
     foreach (LogEntry log in logs) 
     { 
      Log(log.Message); 
     } 
    } 

đây là mã của tôi cho các bản ghi thực tế:

 public void Log(string value, params object[] values) 
    { 
     // allow indenting 
     if (!String.IsNullOrEmpty(value) && value.Length > 0 && value.Substring(0, 1) != "*") 
     { 
      value = "  " + value; 
     } 

     // write the log 
     Console.WriteLine(String.Format(value, values)); 
    } 
0
driver.manage().logs().get("browser") 

Gets tất cả các bản ghi in trên console. Tôi đã có thể nhận được tất cả nhật ký ngoại trừ Vi phạm. Vui lòng xem tại đây Chrome Console logs not printing Violations

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