
Esto es para tomar Captura de pantalla utilizando Selenium Webdriver y guardar en la Base de datos MS SQL. La imagen se está guardando en la base de datos con el nombre de la imagen junto con el nombre del navegador, la versión del navegador, el número de secuencia y el nombre del escenario. Este código es compatible con Chrome, Firefox, Internet Explorer y Safari.
Hay una opción más entre la línea 63-70 para guardar la imagen en una carpeta local si lo desea. Puede configurar una carpeta en el sistema local y se guardará la imagen en la carpeta que especificó en formato png y byte en la base de datos MSSql.
Tome la captura de pantalla y guárdela en la base de datos MSSQL usando Java y Selenium Webriver
paquete com.main;
importar java.awt.image.BufferedImage;
import java.io.File;
importar java.io.FileInputStream;
import java.io.IOException;
importar java.io.InputStream;
importar java.sql.Connection;
importar java.sql.DriverManager;
importar java.sql.PreparedStatement;
import java.sql.ResultSet;
importar java.sql.SQLException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
importar javax.imageio.ImageIO;
importar org.openqa.selenium.Capabilities;
importar org.openqa.selenium.JavascriptExecutor;
importar org.openqa.selenium.OutputType;
importar org.openqa.selenium.TakesScreenshot;
importar org.openqa.selenium.WebDriver;
importar org.openqa.selenium.remote.RemoteWebDriver;
clase pública ImageSave {
private static int imageSeqNo = 0;
cadena estática privada scenName;
WebDriver estático privado browserDriver;
int estático privado browser browserWidth;
navegador estático privado intHeight;
navegador de cadenas estático público;
controlador de WebDriver estático público;
public static int getBrowserWidth () {
volver browserWidth;
}
public static int getBrowserHeight () {
volver browserHeight;
}
Cadena estática pública getScenName () {
devolver scenName;
}
public static int getImageSeqNo () {
devuelve imageSeqNo;
}
public static void main (String [] args) lanza Exception {
// BrowserDriver.getCurrentDriver ();
}
public static void addScreenshot (controlador WebDriver) emite IOException,
ClassNotFoundException, InterruptedException {
byte [] scrByte = getScreenShotBytes (controlador);
browser = getBrowserAndVersion ();
String sceneryName = getScenName ();
Cadena imagenNombre = escenarioNombre + "" + navegador + ""
+ System.currentTimeMillis () + “.png”;
Archivo scrFile = getScreenShotFile (controlador);
String screenWidthHeight = getImageWidthHeight (scrFile);
// si desea guardar la imagen de captura de pantalla en el sistema local, habilite la línea a continuación
// FileUtils.copyFile (scrFile, nuevo archivo (“C: // screenshot //” + imageName));
insertImageDB (scrByte, escenarioNombre, imagenNombre, screenWidthHeight,
navegador);
Thread.sleep (1000);
}
la cadena estática pública getImageWidthHeight (archivo imageFile) lanza IOException {
BufferedImage bimg = ImageIO.read (imageFile);
int imageWidth = bimg.getWidth ();
int imageHeight = bimg.getHeight ();
if (imageWidth! = 0) {
devuelve imageWidth + “x” + imageHeight;
} else {
devuelve "FullScreenx" + imageHeight;
}
}
Archivo estático público getScreenShotFile (controlador WebDriver) {
// controlador de WebDriverA = new Augmenter (). Augment (driver);
return ((TakesScreenshot) driver) .getScreenshotAs (OutputType.FILE);
}
byte estático público [] getScreenShotBytes (controlador WebDriver) {
return ((TakesScreenshot) driver) .getScreenshotAs (OutputType.BYTES);
}
public static void insertImageDB (byte [] imageByte, String scenName,
String imageName, String screenWidthHeight, String browser)
lanza la excepción ClassNotFoundException {
Propiedades dbProp = propiedades nuevas ();
InputStream dbPropInput = null;
ResultSet rs = null;
PreparedStatement ps = null;
Conexión con = null;
// setImageSeqNo (getImageSeqNo () + 1);
int seqNo = getImageSeqNo ();
System.out.println (scenName + ”—-” + browser + ”—-”
+ screenWidthHeight + ”—- Número de disparo:” + seqNo);
tratar {
String propPath = ". \ Src \ test \ resources \ props \ dbConnect.properties";
dbPropInput = new FileInputStream (propPath);
dbProp.load (dbPropInput); // cargar el archivo de propiedades
Cadena dbDriver = (dbProp.getProperty ("dbDriver"));
String dbURL = (dbProp.getProperty ("dbURL"));
String stPro = (dbProp.getProperty ("SPSql"));
Class.forName (dbDriver);
con = DriverManager.getConnection (dbURL);
ps = con.prepareStatement (stPro);
java.util.Date date = new java.util.Date ();
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp (date.getTime ());
System.out.println ("Image Timestamp =" + sqlTimestamp);
ps.setEscapeProcessing (true);
ps.setQueryTimeout (90); // el valor de tiempo de espera puede deshabilitarse más tarde, imagen
ps.setString (1, “Proyecto”);
ps.setString (2, scenName);
ps.setString (3, navegador);
ps.setString (4, screenWidthHeight);
ps.setTimestamp (5, sqlTimestamp);
ps.setInt (6, seqNo);
ps.setString (7, imageName);
ps.setBytes (8, imageByte);
// comentar debajo de la línea para deshabilitar la actualización de la base de datos
ps.executeUpdate ();
} captura (IOException e) {
e.printStackTrace ();
} captura (SQLException e) {
e.printStackTrace ();
} finalmente {
tratar {
if (dbPropInput! = null)
dbPropInput.close ();
si (rs! = nulo)
rs.close ();
si (ps! = nulo)
ps.close ();
si (con! = nulo)
con.close ();
} captura (excepción e) {
e.printStackTrace ();
}
}
}
pública String estática getBrowserAndVersion () {
Cadena browser_version = null;
Capabilities cap = ((RemoteWebDriver) driver) .getCapabilities ();
String browsername = cap.getBrowserName ();
// Este bloque para averiguar el número de versión de IE
if ("internet explorer" .equalsIgnoreCase (nombre de navegador)) {
String uAgent = (String) ((JavascriptExecutor) driver)
.executeScript ("return navigator.userAgent;");
System.out.println (uAgent);
// uAgent regresa como "MSIE 8.0 Windows" para IE8
if (uAgent.contains ("MSIE") && uAgent.contains ("Windows")) {
browser_version = uAgent.substring (uAgent.indexOf ("MSIE") + 5,
uAgent.indexOf ("Windows") - 2);
} else if (uAgent.contains (“Trident / 7.0”)) {
browser_version = “11.0”;
} else {
browser_version = “00”;
}
} else {
// Versión del navegador para Firefox y Chrome
browser_version = cap.getVersion (); // .split (".") [0];
}
String browserversion = browser_version.substring (0,
browser_version.indexOf ("."));
String bVersion = String.format ("% 02d", Integer.parseInt (browserversion));
return ((nombre de usuario) + “_” + bVersion);
}
Cadena estática pública browserNameConvert (String browser_name) {
if (org.apache.commons.lang3.StringUtils.containsIgnoreCase (
nombre de navegador, “explorador”)) {
devuelve "IE";
} else if (org.apache.commons.lang3.StringUtils.containsIgnoreCase (
nombre de navegador, “firefox”)) {
devuelve "FF";
} else if (org.apache.commons.lang3.StringUtils.containsIgnoreCase (
nombre de navegador, "chrome")) {
devuelve "CH";
} else if (org.apache.commons.lang3.StringUtils.containsIgnoreCase (
nombre de navegador, "safari")) {
devuelve "SF";
} else {
devuelve "NA";
}
}
}
Archivo de propiedades de conexión de base de datos MSSQL con credenciales de usuario y procedimiento de almacenamiento
################## dbConnect.properties ##################
dbDriver = com.microsoft.sqlserver.jdbc.SQLServerDriver
dbURL = jdbc: sqlserver: // YOURSERVERURL; database = DATABASENAME; usuario = USERNAME; contraseña = PASSWORD
SPSql = {call STOREPROCEDURE (?, ?, ?, ?, ?, ?, ?, ?)?}
Para guardar en la base de datos, el procedimiento de almacenamiento ya creado en este ejemplo y todos estos datos para la conexión de la base de datos y el procedimiento de almacenamiento se enumeran en el archivo de propiedades.
El nombre del navegador se convierte a formas cortas de 2 caracteres como FF (Firefox), CH (Chrome), etc. Esto también es capaz de encontrar la versión del navegador mediante programación incluyendo el número de versión de Internet Explorer. Este script es compatible con las versiones de Internet Explorer 8, 9, 10, 11.