2017-05-20 1 views
5

Comment faire une capture d'écran pour toute la page Web complète, non seulement partielle à partir du haut en utilisant Selenium WebDriver? Mon code Selenium WD java est comme ci-dessous: System.setProperty ("webdriver.chrome.driver", "/ home/alex/Downloads/chromedriver_linux64/chromedriver");Comment obtenir une capture d'écran de la page Web complète en utilisant Selenium with java?

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

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

des idées?

+0

J'ai une réponse pour vous mais je veux confirmer si cela fonctionne pour vous. Alors, pouvez-vous s'il vous plaît envisager de préciser ce que vous entendez par «page web complète, non seulement partielle du haut en utilisant le sélénium»? Merci – DebanjanB

Répondre

3

La réponse courte est NON, VOUS NE POUVEZ PAS (raison détaillée ci-dessous). Mais, ce que vous pouvez faire est de tirer le meilleur parti de votre appareil (moniteur) viewport. Par conséquent, démarrez votre instance de navigateur (pilote) à l'aide de ChromeOptions(), qui est la méthode de définition des fonctionnalités spécifiques à ChromeDriver. Nous pouvons effectuer les opérations suivantes:

  • de maximiser la fenêtre (en utilisant le commutateur --start-maximized);
  • passer en mode plein écran (F11 -key sous Windows, Control+Cmd+F sur Mac, en utilisant le commutateur --start-fullscreen).
  • Remarque: la liste complète des commutateurs de ligne de commande Chrome peut être trouvée here.

Votre code devrait ressembler à ceci:

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

Maintenant, en ce qui concerne le problème de la pleine page, tous les pilotes (chromedriver, geckodriver, IEDriver, EdgeDriver, etc.) mettent en œuvre la WebDriver W3C norme . Ainsi, ils dépendent de la façon dont l'équipe WebDriver veut exposer la fonctionnalité des différentes fonctionnalités, dans notre cas, 'Take Screenshot'.

Si vous lisez la définition, il énonce clairement les éléments suivants:

La commande Prenez Capture d'écran prend une capture d'écran de VIEWPORT du contexte de navigation de niveau supérieur.

Legacy-sage, certains pilotes ont pu produire une capture d'écran pleine page (en savoir plus sur ce here), comme l'ancien FirefoxDriver, IEDriver, etc. Ce n'est plus le cas car ils mettent en œuvre maintenant tous (à la lettre) le standard WebDriver W3C.

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

Essayez cette

+1

Avez-vous pris le temps d'au moins lire la question, ou le snipped qu'il a fourni? – iamdanchiv

+1

Cette réponse est complètement hors sujet – raffamaiden

1

J'ai trouvé un tutoriel http://www.softwaretestingmaterial.com/how-to-capture-full-page-screenshot-using-selenium-webdriver/ Pour les utilisateurs de Maven: rappelez-vous à ajouter dependendency de https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot Quand je tester ce script, j'ai de grandes images, qui ne peuvent pas être ouverts dans le navigateur (trop grand ou cassé).

Alors peut-être quelqu'un connaît un script, quelle page de focus sur le dernier locator utilisé?

0

Pour certaines pages, je dois prendre une capture d'écran du début et de la fin de la page. Donc, je l'habitude de prendre 2 captures d'écran:

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