how take screenshot selenium
Aquest tutorial explica la importància de Selenium Screenshot i com utilitzar Ashot per fer Screenshot a l'aplicació Selenium amb exemples:
Les captures de pantalla s’utilitzen bàsicament en l’anàlisi d’errors. Ajuden a entendre si l’aplicació funciona o no segons els requisits de l’usuari.
Per a cada cas de prova, la sortida rebuda pot ser diferent, de vegades es rep la sortida correcta, de vegades rebem un error, de vegades es rep un missatge d'error a causa de les dades d'entrada que falten o són insuficients, etc. La captura de pantalla ajuda a rastrejar les proves d'accions / sortides rebut.
=> Consulteu TOTS els tutorials de Selenium aquí
En aquest tutorial, aprendrem on són necessàries les captures de pantalla de Selenium. Discutirem Ashot i com podem utilitzar Ashot a Selenium (instal·lació i configuració d’ashot ()), aprendrem a capturar captures de pantalla a Selenium (per a tota la pàgina web, per a un sol element de la pàgina i per a una finestra oberta actualment, també comparant 2 imatges) i, a continuació, mireu alguns exemples on sovint es capturen captures de pantalla.
Què aprendreu:
- Descripció de les captures de pantalla de Selenium
- Com capturar captures de pantalla a Selenium
- Conclusió
Descripció de les captures de pantalla de Selenium
La imatge anterior és un exemple d’una captura de pantalla capturada mentre s’executava el codi del lloc web de Gmail. La imatge us permet confirmar que l’usuari ha iniciat la sessió al compte de correu electrònic amb el nom d’usuari i la contrasenya correctes.
Per tant, les captures de pantalla són molt útils per capturar les accions / sortida rebudes després de realitzar una acció i, per tant, ajuden a confirmar que es realitza una acció sense cap problema.
El seleni pot fer captures de pantalla automàticament; només hem d’afegir codi per a captures de pantalla en el procés d’execució de qualsevol codi on siguin necessàries captures de pantalla.
On són necessàries les captures de pantalla de seleni
Les següents serien les possibilitats:
- Quan hi ha problemes per trobar un element en una pàgina web.
- On hi ha un temps d'espera per trobar elements web en una pàgina.
- Quan es produeix un error o problema al sistema / aplicació.
- Quan es produeix un error d’afirmació.
Què és Ashot
Ashot () és una utilitat de tercers que el controlador web Selenium admet per capturar les captures de pantalla.
Ashot () proporciona les operacions següents per capturar captures de pantalla:
- Captura de la pàgina completa
- Captura de l'element web
- Comparar imatges
Vegem com funciona exactament a la següent secció.
Característiques d'Ashot:
- És possible fer una captura de pantalla de tota la pàgina.
- També és possible fer una captura de pantalla d’un element web, que és compatible amb diverses plataformes com el navegador Android Emulator, iOS Simulator Mobile Safari, els diferents navegadors d’escriptori).
- Ofereix una comparació de captures de pantalla flexible.
- Decora captures de pantalla.
Ashot pot fer captures de pantalla en tres passos:
- Captura una captura de pantalla de la pàgina completa.
- Cerqueu la mida i la posició de l’element.
- Retalla la captura de pantalla original.
Com podem fer servir Ashot al seleni
Tingueu en compte els passos següents per descarregar i configurar Ashot al vostre equip:
- Aneu al enllaç.
- Cerqueu la versió més recent del fitxer jar present per a Ashot.
- Baixeu i deseu el fitxer jar en un camí d'accés específic de la vostra màquina.
- Ara per afegir el fitxer jar al vostre projecte a Eclipse – Aneu al vostre projecte -> Feu clic amb el botó dret -> aneu a propietats -> seleccioneu Construeix ruta -> Biblioteques -> afegiu pots externs
- Cerqueu el camí on es desa el fitxer jar descarregat.
- Seleccioneu el fitxer jar, feu clic a Aplica i tanca.
Com capturar captures de pantalla a Selenium
Selenium proporciona funcions integrades per capturar captures de pantalla. Segons el requisit, Captura de pantalla La interfície s'utilitza per fer captures de pantalla mentre s'executen els scripts Selenium. Per tant, Selenium Webdriver ajuda a capturar captures de pantalla mentre s’executa el codi.
A la secció següent, coneixerem els diferents tipus de captures de pantalla que es capturen.
A continuació es detallen els tipus:
Captura d'una captura de pantalla de:
- Finestra oberta actual
- Tota la pàgina web
- Només un element web específic
- Comparació de la imatge de captura de pantalla amb la imatge original
Comprenguem detalladament els punts anteriors.
# 1) Finestra oberta actual
Vegem la implementació del codi per gestionar captures de pantalla a Selenium per a la finestra oberta actualment:
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; @Test public class Screenshot { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);//for page load drv.get('https://opensource-demo.orangehrmlive.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait //Capturing the screenshot File f = ((TakesScreenshot) drv).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(f, new File('C:/Users/Chait/Desktop/Screenshots/screenshot01.png')); //screenshot copied from buffer is saved at the mentioned path. System.out.println('The Screenshot is captured.'); } }
La imatge següent és la sortida de la implementació del codi anterior. Aquí s’obre el lloc d’OrangeHRM i es captura la captura de pantalla de la pàgina d’inici de sessió.
[imatge font ]
Per tant, podem capturar captures de pantalla sempre que sigui necessari mentre executem codi. La captura de pantalla capturada es desa en un fitxer amb extensió .png o .jpeg. Hem d’indicar el camí on s’ha de desar el fitxer d’imatges.
proves funcionals vs proves no funcionals
# 2) La pàgina web sencera
Vegem el següent codi d'implementació per capturar una captura de pantalla de la pàgina completa, amb l'ajut d'Ashot in Selenium webdriver. Per a això, considerem l'exemple d'una pàgina (Jmeter-user-defined-variables) de - softwaretestinghelp.com .
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; public class Screenshot_EntirePage { public static void main(String[] args) throws InterruptedException, IOException { WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://www.softwaretestinghelp.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait WebElement auto = drv.findElement(By.xpath('//ul[@id='mega-menu-primary']/li[6]')); auto.click(); //click Automation tab WebElement jmeter = drv.findElement(By.linkText('JMeter')); //link to JMeter page jmeter.click(); //scroll down to open a link among various links, in the Video Tutorials section of the page JavascriptExecutor js = (JavascriptExecutor) drv; js.executeScript('window.scrollBy(0,1700)'); //scrolling downwards Thread.sleep(1500); WebElement udv = drv.findElement(By.linkText('User-Defined Variables')); udv.click(); //opening User-Defined Variables link Thread.sleep(1500); //Capturing the Screenshot with the help of ashot() Screenshot screenshot=new AShot().takeScreenshot(drv); ImageIO.write(screenshot.getImage(),'PNG',new File('C:\Users\Chait\Desktop\Screenshots\entirepage.png')); //The screenshot to be captured will be in .png image format and would be saved at above mentioned path. System.out.println('Screenshot for full page is captured successfully!'); } }
Aquí, el jmeter-variables-definides per l'usuari pàgina del nostre lloc web: www.softwaretestinghelp.com s'obre i després hem pres una captura de pantalla d'aquesta pàgina web completa (amb l'ajut de ashot () en seleni) en format .png i desada al camí desitjat. De la mateixa manera que podem capturar una captura de pantalla de tota la pàgina de qualsevol pàgina web.
Per tant, en implementar el codi anterior per capturar la captura de pantalla de tota la pàgina, la sortida rebuda és la que es mostra a la imatge següent per obtenir una captura de pantalla completa de la pàgina web.
# 3) Un element web
Vegem el codi d'implementació següent, amb l'ús d'Ashot in Selenium webdriver per capturar captures de pantalla d'un element web específic a la pàgina web.
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; @Test public class Screenshot_WebEle_Ashot { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://opensource-demo.orangehrmlive.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait WebElement uname = drv.findElement(By.id('txtUsername')); //Username....ID.... uname.sendKeys('Admin'); WebElement pword = drv.findElement(By.id('txtPassword')); //Password....ID.... pword.sendKeys('admin123'); WebElement login_b = drv.findElement(By.xpath('//input[@id='btnLogin']')); login_b.click(); //Login button....XPATH.... WebElement ele = drv.findElement(By.linkText('Maintenance')); ele.click(); //opening link for element for which we want screenshot // pass driver as well as the element in takeScreenshot() method. Screenshot Screenshot_webele = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(drv, ele); // For saving the screenshot in .png/.jpeg format at the desired location ImageIO.write(Screenshot_webele.getImage(),'png',new File('C:\Users\Chait\Desktop\Screenshots\element.jpeg')); System.out.println('Screenshot for specified element captured successfully!'); } }
Així, en implementar el codi anterior per capturar una captura de pantalla d’un element específic (aquí pestanya Manteniment), la sortida rebuda és la que es mostra a la imatge següent.
Aquí escollim la pestanya 'Manteniment' com a element per al qual cal una captura de pantalla. Esmenta el camí on volem que es desi la captura de pantalla. De la mateixa manera, podem capturar una captura de pantalla de qualsevol altre element en qualsevol lloc web d'aquest tipus.
# 4) Comparació de la captura de pantalla amb la imatge original
Fem una ullada al següent codi d'implementació amb l'ús d'Ashot in Selenium webdriver per capturar una captura de pantalla d'un element de logotip a la pàgina web i comparar-lo amb el logotip original.
Per a això, considerem l'exemple de naukri.com :
package SeleniumPrograms; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.comparison.ImageDiff; import ru.yandex.qatools.ashot.comparison.ImageDiffer; public class Screen_Compare { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://www.naukri.com/nlogin/login'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait // Finding the logo element and capturing its screenshot WebElement logo = drv.findElement(By.xpath('//a[@class='nLogo fl']/img')); Screenshot logoSrcshot = new AShot().takeScreenshot(drv, logo); // Reading the image for comparision BufferedImage expectedImage = ImageIO.read(new File('C:\Users\Chait\Desktop\naukri_Logo.png')); BufferedImage actualImage = logoSrcshot.getImage(); ImageDiffer img_differnece = new ImageDiffer(); // Creating ImageDiffer object and calling the method makeDiff() ImageDiff differnece = img_differnece.makeDiff(actualImage, expectedImage); if (differnece.hasDiff() == true) //Checking the difference using in-built functions) { System.out.println('Both logo images matched') //in case when no difference found } else { System.out.println('The logo images are different'); //in case when difference found } } }
Així, en implementar el codi anterior per comparar la captura de pantalla d'un element de logotip (aquí el logotip de naukri.com), la sortida rebuda és la que es mostra a la imatge següent.
Aquí escollim el logotip de “naukri.com”, capturem la seva captura de pantalla i després es compara amb el logotip original. La diferència entre imatges es troba mitjançant funcions integrades. Si no es troba cap diferència a les 2 imatges del logotip, el programa imprimeix la sortida com a “ Les dues imatges del logotip coincidien 'Else imprimeix' Les imatges del logotip són diferents '.
Exemples on sovint es capturen captures de pantalla
# 1) Confirmació de tancament de sessió
Per iniciar la sessió a un lloc web, hem d’introduir el nom d’usuari i la contrasenya correctes després dels quals hem iniciat la sessió al lloc web. A continuació, l'usuari realitza les opcions necessàries i, un cop acabat el treball, es desconnecta.
Per tant, si proporcionem un codi per a la captura de pantalla després de tancar la sessió, es tornarà a veure la pàgina d'inici de sessió que confirmaria l'acció de tancament de sessió. Consulteu la imatge següent per obtenir més informació:
# 2) Confirmació d’un registre de nova creació
Si afegiu codi per a la captura de pantalla després de crear un registre nou, es confirma que el registre s’ha creat correctament. Consulteu la captura de pantalla següent per obtenir més informació.
En cas que no es creï el registre, el codi no continuaria capturant captures de pantalla i això confirmaria que el registre no s'està creant correctament.
# 3) Exemple de sortida faltant / incorrecta
Aquest exemple inclou la creació d’un registre nou per al títol del lloc de treball al lloc web d’OrangeHRM. Aquí, el camp Títol del treball està marcat com a * *, el que significa que és un camp obligatori. Per tant, el registre no es crearà fins que no s’omplin els camps obligatoris i només nosaltres podrem desar-lo. Consulteu la captura de pantalla següent per obtenir més informació.
Conclusió
Per tant, en aquest article hem vist, on es necessiten captures de pantalla de Selenium, com podem gestionar les captures de pantalla de Selenium, què és Ashot, com es pot descarregar, configurar i fer servir realment a Selenium. Vam entendre la implementació del codi per gestionar captures de pantalla i també vam veure alguns exemples on sovint es capturen captures de pantalla.
=> Llegiu la guia completa de seleni
Lectura recomanada
- 30+ millors tutorials sobre seleni: apreneu el seleni amb exemples reals
- Tutorial Selenium Find Element By Text amb exemples
- Introducció a Selenium WebDriver - Tutorial Selenium # 8
- Tutorial de ChromeDriver Selenium: proves de Selenium Webdriver a Chrome
- Manipulació d’iFrames mitjançant el mètode Selenium WebDriver switchTo ()
- Com es crea un projecte Gradle amb seleni
- Com gestionar les alertes / finestres emergents a Selenium WebDriver - Selenium Tutorial # 16
- Com gestionar la barra de desplaçament a Selenium Webdriver