2012-10-22 40 views
9

Tôi đang sử dụng Selenium WebDriver để chụp ảnh màn hình trang web. Nó chạy rất tốt. Tuy nhiên, từ thời điểm tôi nhấn chạy trong nhật thực đến thời điểm ảnh chụp màn hình hiển thị trong ổ đĩa cục bộ của tôi là 7-10 giây. Hầu hết độ trễ dường như đang khởi chạy Firefox.Selenium WebDriver hoạt động nhưng SLOW (Java)

Code:

WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.cnn.com"); 
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
FileUtils.copyFile(scrFile, new File("c:\\test\\screenshot.png")); 

Làm thế nào tôi có thể tăng tốc độ quá trình này? Có cách nào để tôi có thể sử dụng trình duyệt Firefox đã mở để lưu khi mở một trình duyệt mới không? Mã này có nặng không?

Chi tiết: Đã thử trên hộp CentOS và hộp Win7 đều sử dụng nhật thực. myspeedtest.net hiển thị 22Mbps và 1 Mbps trở lên.

Trả lời

10

Những gì bạn đang yêu cầu (cho phép WebDriver đính kèm với trình duyệt đang chạy) đã xảy ra sự cố ngay bây giờ cho almost 3 years. Đến nay, tính năng này vẫn chưa được thêm. Theo tôi biết, không có cách nào để làm cho Firefox tải nhanh hơn. Bạn có thể thử một vài thủ thuật khác.

fp.setPreference("webdriver.load.strategy", "unstable") 

Trích dẫn caveat từ this page:

Có tính năng beta để làm cho firefox không chờ đợi cho trang đầy đủ để tải sau khi gọi .get hoặc .click. Điều này có thể khiến cho việc tìm kiếm ngay lập tức bị lỗi , vì vậy, hãy đảm bảo sử dụng thời gian chờ ngầm định hoặc rõ ràng. Điều này chỉ có sẵn cho Firefox và không có sẵn cho các trình duyệt khác.

Bạn cũng có thể thử loading with a profile và xem điều đó có giúp ích gì không.

+0

Wow. Thất vọng. Cám ơn Mike. – Chris

5

Từ những điều tôi học được ở nơi khác -

  1. Tắt tự động cập nhật cho trình duyệt của bạn/plugins
  2. Đặt IIS của bạn (hoặc tương đương) timeouts ứng dụng không
  3. Tạo một cơ sở Selenium Fixture để sử dụng trong các thử nghiệm của bạn
  4. Cập nhật lên phiên bản mới nhất của Selenium
  5. Làm nóng ứng dụng của bạn trước khi thử nghiệm
  6. Sh kiểm tra ort
  7. Điền trước cookie.

Tài liệu tham khảo:

https://sqa.stackexchange.com/questions/1988/selenium-reuse-existing-browser-session-instead-of-opening-new-windows

http://www.codeweavers.net/6-ways-to-speed-up-selenium-tests/

http://sauceio.com/index.php/2011/02/speed-up-your-selenium-tests/

Hope this helps!

+2

Tôi là tác giả của bài viết sáu cách - vui vì bạn thấy nó hữu ích. Chỉ cần để echo những gì ở đây, chìa khóa là giữ cho các ứng dụng của bạn ấm áp, không để máy chủ của bạn hết thời gian chờ và đảm bảo không có gì sẽ cố gắng cập nhật trong khi chạy thử nghiệm. – Finglas

+1

Yêu thích bài viết !!! :) –

1

Tôi nhận thấy rằng câu hỏi này đã được trả lời, nhưng tôi hy vọng điều này sẽ giúp mọi người có cùng một vấn đề.

Nếu tất cả những gì bạn cần làm là chụp ảnh màn hình. Tôi khuyên bạn nên sử dụng Awesomium.NET. http://awesomium.com/

Làm điều này trong C# thay vì Java không phải là một khó khăn lớn vì chúng có cú pháp tương tự. Nó cũng hỗ trợ C++ nếu bạn muốn chạy ứng dụng của bạn trên Linux. Tôi đoán nó sẽ nhanh hơn đáng kể so với WebDriver.

Sử dụng này nếu bạn chọn C++: http://labs.awesomium.com/capturing-web-pages-with-c/

Đối với C# .NET: http://awesomium.com/docs/1_7_rc3/sharp_api/

+0

Marv bạn mất bao lâu để nhấp vào biên dịch và nhận ảnh chụp màn hình đã tạo của mình? – Chris

+0

điều này có liên kết chết –

2

This thread cho thấy một lời giải thích có thể.

Để tóm tắt, Selenium lặp qua tất cả các card mạng và gọi một phương thức (getHostName) mất nhiều thời gian cho các card mạng ảo. Vô hiệu hóa chúng đã giải quyết được vấn đề của OP trong chuỗi.

(Trong trường hợp của riêng tôi, tôi không thể để vô hiệu hóa bất kỳ trong số họ và phải đợi lúc bắt đầu của mỗi trường hợp thử nghiệm ...)

+0

bị kiểm tra, hãy cập nhật cho chúng tôi ~! – Chris

0

Đối với tôi nó làm việc với phiên bản 64bit của IEDriverServer, tôi đã thêm thuộc tính requireWindowFocus với Value: "true".

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer(); 
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); 

capabilities.setCapability("requireWindowFocus", true); 
WebDriver driver = new InternetExplorerDriver(capabilities); 
Các vấn đề liên quan