2017-05-20 18 views
5

Làm thế nào để tạo ảnh chụp màn hình cho toàn bộ trang web, không chỉ một phần từ đầu bằng cách sử dụng Selenium WebDriver?Làm thế nào để có được ảnh chụp màn hình của trang web đầy đủ bằng cách sử dụng Selenium với java?

Mã java Selenium WD của tôi như sau: System.setProperty ("webdriver.chrome.driver", "/ home/alex/Downloads/chromedriver_linux64/chromedriver");

WebDriver driver = new ChromeDriver(); 
    driver.get("http://google.com"); 
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 

    FileUtils.copyFile(scrFile, new File(RESULT_FILENAME)); 

bất kỳ ý tưởng nào?

+0

Tôi có câu trả lời cho bạn nhưng tôi muốn xác nhận xem điều đó có phù hợp với bạn hay không. Vì vậy, bạn có thể vui lòng xem xét chi tiết ra những gì bạn có nghĩa là bởi 'toàn bộ trang web, không chỉ một phần từ đầu bằng cách sử dụng selenium'? Cảm ơn – DebanjanB

Trả lời

3

Câu trả lời ngắn gọn là KHÔNG, BẠN KHÔNG THỂ (lý do chi tiết bên dưới). Nhưng, những gì bạn có thể làm là tận dụng tối đa thiết bị (màn hình) viewport.

Vì vậy, hãy bắt đầu phiên bản trình duyệt (trình điều khiển) của bạn bằng cách sử dụng ChromeOptions(), là phương pháp để thiết lập các khả năng cụ thể của ChromeDriver. Chúng tôi có thể làm như sau:

  • tối đa hóa cửa sổ (sử dụng công tắc --start-maximized);
  • chuyển sang chế độ toàn màn hình (F11 -key trên Windows, Control+Cmd+F trên máy Mac, sử dụng công tắc --start-fullscreen).
  • Lưu ý: có thể tìm thấy danh sách đầy đủ các công tắc dòng lệnh của Chrome here.

Mã của bạn sẽ trông như thế này:

// Setting your Chrome options (Desired capabilities) 
ChromeOptions options = new ChromeOptions(); 
options.add_argument('--start-maximized'); 
options.add_argument('--start-fullscreen'); 

// Creating a driver instance with the previous capabilities 
WebDriver driver = new ChromeDriver(options); 

// Load page & take screenshot of full-screen page 
driver.get("http://google.com"); 
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 

Bây giờ về vấn đề trang đầy đủ, tất cả các trình điều khiển (chromedriver, geckodriver, IEDriver, EdgeDriver, vv) đang thực hiện tiêu chuẩn WebDriver W3C . Do đó, chúng phụ thuộc vào cách nhóm WebDriver muốn hiển thị chức năng của các tính năng khác nhau, trong trường hợp của chúng tôi là 'Take Screenshot'.

Nếu bạn đọc các định nghĩa, nó nêu rõ như sau:

Lệnh Chụp ảnh màn hình mất một ảnh chụp màn hình của top-level duyệt bối cảnh của VIEWPORT.

Legacy-khôn ngoan, một số tài xế đã có thể tạo ra một ảnh chụp màn hình toàn bộ trang (đọc thêm về nó here), giống như FirefoxDriver cũ, IEDriver, vv Đó không còn là trường hợp như họ bây giờ tất cả thực hiện (đến thư) tiêu chuẩn WebDriver W3C.

-3
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
FileUtils.copyFile(scrFile, new File("c:\\RESULT_FILENAME.png")); 

Hãy thử điều này

+1

Bạn đã dành thời gian ít nhất là đọc câu hỏi, hoặc anh ta đã cung cấp cho anh ta? – iamdanchiv

+1

Câu trả lời này hoàn toàn tắt chủ đề – raffamaiden

1

Tôi đã tìm thấy một hướng dẫn http://www.softwaretestingmaterial.com/how-to-capture-full-page-screenshot-using-selenium-webdriver/ Đối với người dùng maven: nhớ về việc thêm dependendency từ https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot Khi tôi kiểm tra kịch bản này, tôi đã có hình ảnh lớn, mà không thể được mở trong trình duyệt (quá lớn hoặc bị hỏng).

Vì vậy, có thể ai đó biết bất kỳ tập lệnh nào, trang nào tập trung vào công cụ định vị được sử dụng gần đây nhất?

0

Đối với một số trang, tôi đã chụp ảnh để chụp màn hình bắt đầu và kết thúc trang. Vì vậy, tôi sử dụng để chụp 2 ảnh chụp màn hình:

public static String javaIoTmpDir = System.getProperty("java.io.tmpdir"); //tmp dir 
//create screenshot 
    driver.manage().window().fullscreen(); 
    //For large pages - body over 850 px highh - take addition screenshot of the end of page 
    if (driver.findElements(By.id("panel_body")).size()>0) { 
     WebElement body = driver.findElement(By.id("panel_body")); 
     int bodyHight = body.getSize().getHeight(); 
     if (bodyHight > 850) { 
      Robot robot = new Robot(); 
      robot.keyPress(KeyEvent.VK_END); 
      robot.keyRelease(KeyEvent.VK_END); 
      Thread.sleep(1000); 
      File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); 
      String timePictureEnd = javaIoTmpDir+"\\scr_"+String.valueOf(System.currentTimeMillis())+getClass().toString().substring(getClass().toString().lastIndexOf(".qa.")+3)+".png"; 
      FileUtils.copyFile(scrFile, new File(timePictureEnd)); 
      robot.keyPress(KeyEvent.VK_HOME); //back to top page for next screen 
      robot.keyRelease(KeyEvent.VK_HOME); 
      Thread.sleep(1000); 
     } 
    } 
    String timePicture = javaIoTmpDir+"\\scr_"+String.valueOf(System.currentTimeMillis())+getClass().toString().substring(getClass().toString().lastIndexOf(".qa.")+3)+".png"; 
    File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); 
    FileUtils.copyFile(scrFile, new File(timePicture)); 
Các vấn đề liên quan