2011-07-06 4 views
9

Estoy ejecutando la prueba Selenium WebDriver en una PC remota desde mi computadora portátil (cliente Java), usando RemoteWebDriver. Pero RemoteWebDriver no ha proporcionado una API de captura de pantalla para obtener directamente una captura de pantalla de una PC remota. Google buscó mucho pero parece que necesita usar Json API para obtenerlo directamente del servidor de RemoteWebDriver. ¿Alguien puede darme alguna instrucción sobre cómo hacer eso? Gracias.¿Cómo obtener una captura de pantalla del servidor RemoteWebDriver en lugar de FirefoxDriver local?

Respuesta

12

El RemoteWebDriver se debe aumentar antes de que pueda utilizar la capacidad de captura de pantalla. Como ya ha descubierto, intentar lanzar sin aumentar los resultados en una excepción.

WebDriver driver = new RemoteWebDriver(...); 
driver   = new Augmenter().augment(driver); 
((TakesScreenshot)driver).getScreenshotAs(...); 

+0

¿Puede decirnos por qué la capacidad de captura de pantalla no estaba integrada en el RemoteWebDriver? Me pregunto qué hace este paso extra en segundo plano. Por cierto, según los documentos, Augmenter es una función experimental y debe usarse con precaución. – testerjoe2

3

Creo que esta es la mejor manera:

public<T> Object getScreenshotAs(OutputType<T> outputType) { 
    Augmenter augmenter = new Augmenter(); 
    TakesScreenshot ts = (TakesScreenshot) augmenter.augment(driver); 
    return ts.getScreenshotAs(outputType); 
} 
0

El RemoteWebDriver no implementa la TakesScreenShot y los métodos descritos aquí para emitir el instancia de RemoteWebDriver a TakesScreenShot causará una ClassCastException. Veré si puedo encontrar una solución ya que estoy interesado en hacer lo mismo.

El Augmenter "mejorará las interfaces implementadas por esta instancia de WebDriver si esa instancia es un RemoteWebDriver". Dependiendo de cómo esté configurado RemoteWebDriver y cómo se está ejecutando el servidor de selenio en el host remoto, es posible obtener una captura de pantalla usando org.openqa.selenium.remote.Augmenter.

He configurado el RemoteWebDriver para usar las capacidades DesiredCapabilities.htmlUnit() y esto da un ClassCastError. Si RemoteWebDriver está configurado con las capacidades de un controlador que implementa la interfaz TakesScreenshot, es posible que no se produzca una ClassCastException, aunque todavía no lo he probado.

Desde la interfaz TakesScreenshot, los conductores de implementación conocidos son: AndroidDriver, AndroidWebDriver, ChromeDriver, EventFiringWebDriver, FirefoxDriver, InternetExplorerDriver, IPhoneDriver, IPhoneSimulatorDriver y SafariDriver

+0

¡He ejecutado esto usando un controlador de Firefox en el servidor y funciona! – gffny

5

yo era capaz de conseguir este trabajo ... He aquí lo que tiene que hacer:

1) Crear un nuevo archivo de clase en un directorio o en algún lugar Util

package com.util; 

import java.net.URL; 
import org.openqa.selenium.OutputType; 
import org.openqa.selenium.TakesScreenshot; 
import org.openqa.selenium.WebDriverException; 
import org.openqa.selenium.remote.CapabilityType; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.DriverCommand; 
import org.openqa.selenium.remote.RemoteWebDriver; 

public class ScreenShotRemoteWebDriver extends RemoteWebDriver implements TakesScreenshot { 

    public ScreenShotRemoteWebDriver(URL url, DesiredCapabilities dc) { 

     super(url, dc); 

    } 

    @Override 
    public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException { 

     if ((Boolean) getCapabilities().getCapability(CapabilityType.TAKES_SCREENSHOT)) { 
      return target.convertFromBase64Png(execute(DriverCommand.SCREENSHOT).getValue().toString()); 
     } 
     return null; 

    } 

} 

2) Entonces ... que cada vez que inicia el RemoteWeDriver, reemplace con este código:

driver = new ScreenShotRemoteWebDriver(new URL(-PUT YOUR HUB URL HERE-),cap); 

Las capturas de pantalla se almacenarán localmente.

Espero que esto ayude.

+0

Woah cool. ¡Voy a intentar esto! –

+0

Impresionante ... ¡déjame saber cómo funciona para ti! – zerotres

Cuestiones relacionadas