how take screenshot selenium
Oracle pl sql rozhovor otázky pro zkušené
Tento tutoriál vysvětluje důležitost obrazovky Selenium Screenshot & jak používat Ashot k pořízení obrazovky v aplikaci Selenium pomocí příkladů:
Screenshoty se v zásadě používají při analýze chyb. Pomáhají pochopit, zda aplikace funguje podle požadavků uživatele nebo ne.
U každého testovacího případu může být přijatý výstup odlišný, někdy je přijat správný výstup, někdy se zobrazí chyba, někdy se zobrazí chybová zpráva kvůli chybějícím nebo nedostatečným vstupním údajům atd. Screenshot pomáhá při sledování důkazů akcí / výstupů obdržel.
=> Podívejte se na VŠECHNY výukové programy selenu zde
V tomto tutoriálu se naučíme, kde jsou potřeba snímky selenu. Budeme diskutovat o Ashotu a o tom, jak můžeme použít Ashot v selenu (instalace a konfigurace ashot ()), naučit se pořizovat snímky obrazovky v selenu (pro celou webovou stránku, pro jeden prvek na stránce a pro aktuálně otevřené okno, také porovnání 2 obrázky) a poté se podívejte na několik příkladů, kde se často pořizují snímky obrazovky.
Co se naučíte:
Porozumění snímkům selenu
Výše uvedený obrázek je příkladem snímku obrazovky pořízeného při provádění kódu z webu Gmailu. Obrázek pomáhá potvrdit, že se uživatel úspěšně přihlásil k e-mailovému účtu se správným uživatelským jménem a heslem.
Screenshoty jsou tedy velmi užitečné při zachycování akcí / výstupů přijatých po provedení akce, a proto pomáhají při potvrzování provedené akce bez jakéhokoli problému.
Selen může automaticky pořizovat snímky obrazovky; musíme jen přidat kód pro screenshot v procesu provádění jakéhokoli kódu, kde jsou potřeba screenshoty.
Kde jsou potřeba snímky selenu
Možnosti by byly následující:
- Když je problém s nalezením prvku na webové stránce.
- Kde je časový limit při hledání webových prvků na stránce.
- Dojde-li k chybě nebo problému v systému / aplikaci.
- Když dojde k selhání tvrzení.
Co je Ashot
Ashot () je nástroj třetí strany, který je podporován webovým ovladačem Selenium k pořizování snímků obrazovky.
Ashot () poskytuje níže uvedené operace při pořizování snímků obrazovky:
- Zachycení celé stránky
- Zachycení webového prvku
- Porovnávání obrázků
Uvidíme, jak přesně to funguje, v další části.
Vlastnosti Ashot:
- Je možné pořídit snímek obrazovky celé stránky.
- Je také možné pořídit snímek obrazovky webového prvku, který je podporován na různých platformách, jako je Android Emulator Browser, iOS Simulator Mobile Safari, různé desktopové prohlížeče).
- Poskytuje flexibilní srovnání snímků obrazovky.
- Zdobí snímky obrazovky.
Ashot může pořizovat snímky obrazovky ve třech krocích:
- Zachytí snímek obrazovky celé stránky.
- Najděte velikost a polohu prvku.
- Ořízne původní snímek obrazovky.
Jak můžeme použít ashot v selenu
Zvažte následující kroky pro stažení a konfiguraci Ashot na vašem počítači:
- Přejít na odkaz.
- Najděte nejnovější verzi souboru jar pro Ashot.
- Stáhněte si a uložte soubor jar na konkrétní cestu ve vašem počítači.
- Nyní pro přidání souboru jar do vašeho projektu v Eclipse - přejděte do svého projektu -> klepněte pravým tlačítkem myši -> přejděte na vlastnosti -> vyberte Build Path -> Libraries -> add External jars
- Projděte cestu, kde je uložen stažený soubor jar.
- Vyberte soubor jar, klikněte na Použít a zavřete.
Jak pořizovat snímky obrazovky v selenu
Selen poskytuje vestavěné funkce pro pořizování snímků obrazovky. Podle požadavku, Vezme snímek obrazovky rozhraní se používá k pořizování snímků obrazovky při provádění selenových skriptů. Selenium Webdriver tedy pomáhá při snímání snímků obrazovky během provádění kódu.
V níže uvedené části se dozvíme o různých typech snímků obrazovky, které jsou zachyceny.
Jsou následující typy:
Pořízení snímku obrazovky:
- Aktuální otevřené okno
- Celá webová stránka
- Pouze konkrétní webový prvek
- Porovnání snímku obrazovky s původním obrázkem
Rozumíme výše uvedeným bodům podrobně.
# 1) Aktuální otevřené okno
Podívejme se na implementaci kódu pro zpracování snímků obrazovky v selenu pro aktuálně otevřené okno:
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.'); } }
Níže uvedený obrázek je výstupem implementace výše uvedeného kódu. Zde je otevřen web OrangeHRM a je zachycen snímek obrazovky přihlašovací stránky.
[obraz zdroj ]
Můžeme tedy při provádění kódu zachytit snímky obrazovky tam, kde je to kdy požadováno. Zachycený snímek obrazovky se uloží do souboru s příponou .png nebo .jpeg. Musíme uvést cestu, kam je třeba uložit obrazový soubor.
jak zobrazit soubor .dat
# 2) Celá webová stránka
Podívejme se na níže uvedený implementační kód pro pořízení snímku celé stránky pomocí Ashot in Selenium webdriver. Zvažme příklad stránky (Jmeter-user-defined-variables) z - 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!'); } }
Tady je jmeter-uživatelem definované proměnné stránka našeho webu: www.softwaretestinghelp.com otevře se a poté jsme pořídili snímek obrazovky této kompletní webové stránky (pomocí ashot () v selenu) ve formátu .png a uložili jsme na požadovanou cestu. Stejným způsobem můžeme pořídit snímek celé stránky pro jakoukoli webovou stránku.
Při implementaci výše uvedeného kódu pro zachycení snímku obrazovky celé stránky je tedy přijatý výstup zobrazen na následujícím obrázku pro kompletní snímek webové stránky.
# 3) Webový prvek
Podívejme se na níže uvedený implementační kód s použitím Ashot v selenovém webdriveru pro zachycení snímku obrazovky konkrétního webového prvku na webové stránce.
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!'); } }
Při implementaci výše uvedeného kódu pro zachycení snímku obrazovky konkrétního prvku (zde karta Údržba), přijímaný výstup je zobrazen na následujícím obrázku.
Zde zvolíme kartu „Údržba“ jako prvek, pro který je vyžadován snímek obrazovky. Uveďte cestu, kam chceme uložit snímek obrazovky. Stejným způsobem můžeme na jakémkoli takovém webu pořídit snímek obrazovky pro jakýkoli jiný prvek.
# 4) Porovnání snímku obrazovky s původním obrázkem
Pojďme se podívat na níže uvedený implementační kód s použitím Ashot in Selenium webdriver pro zachycení screenshotu prvku loga na webové stránce a jeho porovnání s původním logem.
Uvažujme tedy o příkladu 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 } } }
Při implementaci výše uvedeného kódu pro srovnání snímku obrazovky prvku loga (zde logo naukri.com) je tedy přijat výstup, jak je znázorněno na následujícím obrázku.
Zde zvolíme logo webu „naukri.com“, pořídíme jeho snímek obrazovky a poté bude porovnáno s původním logem. Rozdíl mezi obrázky lze zjistit pomocí vestavěných funkcí. Pokud na 2 obrázcích loga není nalezen žádný rozdíl, program vytiskne výstup jako „ Oba obrázky loga se shodovaly „Else prints“ Obrázky loga se liší “.
Příklady, kde jsou často pořizovány snímky obrazovky
# 1) Potvrzení odhlášení
Abychom se mohli přihlásit na web, musíme zadat správné uživatelské jméno a heslo, po kterém se přihlásíme na web. Poté uživatel provede požadované možnosti a po dokončení práce se odhlásí.
Pokud tedy po odhlášení poskytneme kód pro snímek obrazovky, znovu se zobrazí přihlašovací stránka, která by potvrdila akci odhlášení. Další podrobnosti naleznete na následujícím obrázku:
# 2) Potvrzení nově vytvořeného záznamu
Přidání kódu pro snímek obrazovky po vytvoření nového záznamu potvrzuje úspěšné vytvoření záznamu. Další podrobnosti najdete na níže uvedeném snímku obrazovky.
V případě, že záznam není vytvořen, kód by dále nepokračoval v zachycení snímku obrazovky a to by potvrdilo, že záznam se nevytváří úspěšně.
# 3) Příklad chybějícího / nesprávného výstupu
Tento příklad zahrnuje vytvoření nového záznamu pro Job Job na webu OrangeHRM. Zde je pole Název pracovní pozice označeno „*“, což znamená, že se jedná o povinné pole. Záznam by tedy nebyl vytvořen, dokud nebudou vyplněna požadovaná pole a pak budeme moci záznam uložit pouze my. Další podrobnosti najdete na níže uvedeném snímku obrazovky.
bezplatná aplikace pro plánování příspěvků na instagramu
Závěr
V tomto článku jsme tedy viděli, kde jsou potřeba snímky selenu, pak to, jak můžeme zpracovávat snímky obrazovky v selenu, co je to Ashot, jak je lze stáhnout, konfigurovat a skutečně použít v selenu. Pochopili jsme implementaci kódu pro zpracování snímku obrazovky a také jsme viděli několik příkladů, kdy jsou snímky obrazovky často zachyceny.
=> Přečtěte si úplného průvodce selenem
Doporučené čtení
- 30+ nejlepších návodů na selen: Naučte se selen se skutečnými příklady
- Výukový program pro vyhledání prvku selen pomocí textu s příklady
- Úvod do Selenium WebDriver - Selenium Tutorial # 8
- Výukový program ChromeDriver Selenium: Testy selenového webdriveru v prohlížeči Chrome
- Zpracování iFrames pomocí metody switchTo () selenu WebDriver
- Jak vytvořit projekt Gradle se selenem
- Jak zacházet s výstrahami / vyskakovacími okny v Selenium WebDriver - Selenium Tutorial # 16
- Jak zacházet s posuvníkem v selenovém webdriveru