how take screenshot selenium
Този урок обяснява значението на Selenium Screenshot и как да използвате Ashot, за да направите Screenshot в приложението Selenium с примери:
Снимките на екрана се използват основно при анализ на грешки. Те помагат да се разбере дали приложението работи според изискванията на потребителя или не.
За всеки тестов случай полученият изход може да е различен, понякога се получава правилния изход, понякога получаваме грешка, понякога се получава съобщение за грешка поради липсващи или недостатъчни входни данни и др. Снимката на екрана помага за проследяване на доказателствата за действия / изходи получени.
=> Проверете ВСИЧКИ уроци за селен тук
каква е разликата между c ++ и java
В този урок ще научим къде са необходими екранни снимки на Selenium. Ще обсъдим Ashot и как можем да използваме Ashot в Selenium (инсталиране и конфигуриране на ashot ()), да се научим да правим снимки на екрани в Selenium (за цялата уеб страница, за един елемент на страницата и за отворен в момента прозорец, като сравняваме 2 изображения) и след това разгледайте няколко примера, при които екранните снимки често се заснемат.
Какво ще научите:
Разбиране на екранни снимки на селен
Горното изображение е пример за скрийншот, заснет при изпълнение на код от уебсайта на Gmail. Изображението помага да потвърди, че потребителят е влязъл успешно в имейл акаунта с правилното потребителско име и парола.
По този начин екранните снимки са много полезни при заснемане на действията / изхода, получени след изпълнение на дадено действие и по този начин помага при потвърждаване на извършено действие без никакъв проблем.
Селенът може автоматично да прави екранни снимки; трябва просто да добавим код за екранна снимка в процеса на всяко изпълнение на код, където са необходими екранни снимки.
Къде са необходими екранни снимки на селен
Следват възможностите:
- Когато има проблеми с намирането на елемент на уеб страница.
- Където има време за изчакване при намирането на уеб елементи на страница.
- Когато възникне грешка или проблем в системата / приложението.
- Когато се установи неуспех на твърдение.
Какво е Ашот
Ashot () е помощна програма на трета страна, която се поддържа от уеб драйвера Selenium за заснемане на екранни снимки.
Ashot () предоставя по-долу операции при заснемане на екранни снимки:
- Заснемане на цялата страница
- Улавяне на уеб елемента
- Сравняване на изображения
Нека видим как точно работи това в следващия раздел.
Характеристики на Ashot:
- Възможно е да направите екранна снимка на цялата страница.
- Възможно е да направите и екранна снимка на уеб елемент, който се поддържа на различни платформи като Android Emulator Browser, iOS Simulator Mobile Safari, различните браузъри за настолни компютри).
- Осигурява гъвкаво сравнение на екрана.
- Украсява екранни снимки.
Ashot може да прави екранни снимки в три стъпки:
- Заснема екранна снимка на цялата страница.
- Намерете размера и позицията на елемента.
- Изрязва оригиналната екранна снимка.
Как можем да използваме Ashot в селен
Обмислете следните стъпки за изтегляне и конфигуриране на Ashot на вашето устройство:
- Отидете на връзка.
- Намерете най-новата версия на jar файла, наличен за Ashot.
- Изтеглете и запазете jar файла по определен път на вашата машина.
- Сега за добавяне на jar файла към вашия проект в Eclipse - Отидете на вашия проект -> Щракнете с десния бутон -> отидете на свойства -> изберете Изграждане на път -> Библиотеки -> добавяне на външни буркани
- Прегледайте пътя, където е запазен изтегленият файл на jar.
- Изберете файла на jar, щракнете върху Apply и затворете.
Как да заснемете екранни снимки в селен
Selenium предоставя вградена функционалност за заснемане на екранни снимки. Според изискването, TakesScreenshot интерфейсът се използва за заснемане на екранни снимки, докато се изпълняват скриптове на Selenium. По този начин Selenium Webdriver помага при заснемането на екранни снимки, докато кодът се изпълнява.
В раздела по-долу ще научим за различните типове снимки, които са заснети.
Следват типовете:
Заснемане на екранна снимка на:
- Текущ отворен прозорец
- Цялата уеб страница
- Просто специфичен уеб елемент
- Сравнение на изображението на екранна снимка с оригиналното изображение
Нека разберем подробно горните точки.
# 1) Текущ отворен прозорец
Нека разгледаме внедряването на код за обработка на екранни снимки в Selenium за отворения в момента прозорец:
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.'); } }
Изображението по-долу е резултат от горната реализация на кода. Тук сайтът OrangeHRM е отворен и екранната снимка на страницата за вход е заснета.
(изображение източник )
По този начин можем да заснемаме екранни снимки, когато някога е било необходимо, докато изпълняваме код. Заснетата екранна снимка се записва във файл с разширение .png или .jpeg. Трябва да дадем пътя, където трябва да бъде запазен файлът с изображение.
# 2) Цялата уеб страница
Нека разгледаме по-долу кода за изпълнение за заснемане на екранна снимка на цялата страница с помощта на Ashot в Selenium webdriver. За това нека разгледаме примера на страница (Jmeter-потребителски дефинирани променливи) от - 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!'); } }
Ето, jmeter-дефинирани от потребителя променливи страница на нашия уебсайт: www.softwaretestinghelp.com се отваря и след това направихме екранна снимка на тази пълна уеб страница (с помощта на ashot () в селен) във формат .png и запазихме на желания път. По същия начин можем да заснемем екранна снимка на цялата страница за всяка уеб страница.
По този начин, при внедряването на горния код за заснемане на екранна снимка на цялата страница, получените резултати са както е показано на изображението по-долу за пълна екранна снимка на уеб страница.
# 3) Уеб елемент
Нека разгледаме по-долу кода за внедряване, с използването на Ashot в Selenium webdriver за заснемане на екранна снимка на конкретен уеб елемент на уеб страницата.
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!'); } }
По този начин при прилагането на горния код за заснемане на екранна снимка на определен елемент (тук раздел Поддръжка), полученият изход е както е показано на изображението по-долу.
Тук избираме раздела „Поддръжка“ като елемент, за който се изисква скрийншот. Споменете пътя, където искаме да се запази екранната снимка. По същия начин можем да направим екранна снимка за всеки друг елемент, както и на всеки такъв уеб сайт.
# 4) Сравняване на екранната снимка с оригиналното изображение
Нека да разгледаме кода по-долу за изпълнение с използването на Ashot в Selenium webdriver за заснемане на екранна снимка на елемент от лого на уеб страницата и сравняването му с оригиналното лого.
За това нека разгледаме примера на 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 } } }
По този начин при внедряването на горния код за сравнение на екранната снимка на елемент от лого (тук лого на naukri.com), получените резултати са както е показано на изображението по-долу.
Тук избираме логото на „naukri.com“, заснемаме екранната му снимка и след това е сравнено с оригиналното лого. Разликата между изображенията се намира с помощта на вградени функции. Ако не се открие разлика в 2-те изображения на лого, програмата отпечатва изхода като „ И двете изображения на лого съвпадат ”Иначе отпечатва“ Изображенията на логото са различни ”.
Примери, където често се улавят екранни снимки
# 1) Потвърждение за излизане
За да влезем в уебсайт, трябва да въведем правилното потребителско име и парола, след което влизаме в уебсайта. След това потребителят изпълнява необходимите опции и след като приключи с работата, потребителят излиза от системата.
Така че, ако предоставим код за екранна снимка след излизане, отново ще се види страницата за вход, която ще потвърди действието за излизане. Моля, вижте изображението по-долу за повече подробности:
връщане на масив от низове в java
# 2) Потвърждение на новосъздаден запис
Добавянето на код за екранна снимка след създаване на нов запис потвърждава, че записът е създаден успешно. Моля, вижте екранната снимка по-долу за повече подробности.
В случай, че когато записът не е създаден, кодът няма да продължи да заснема екранна снимка и това ще потвърди, че записът не се създава успешно.
# 3) Пример за липсващ / неправилен изход
Този пример включва създаване на нов запис за длъжност на уебсайта OrangeHRM. Тук полето Job Title е означено с „*“, което означава, че е задължително поле. Така че, записът няма да бъде създаден, докато задължителните полета не бъдат попълнени и тогава само ние ще можем да запазим записа. Моля, вижте екранната снимка по-долу за повече подробности.
Заключение
По този начин, в тази статия видяхме, къде са необходими екранни снимки на Selenium, след това как можем да обработваме екранни снимки в Selenium, какво е Ashot, как може да бъде изтеглен, конфигуриран и действително използван в Selenium. Разбрахме внедряването на код за обработка на екранна снимка и също така видяхме няколко примера, когато екранните снимки често се заснемат.
=> Прочетете пълното ръководство за селен
Препоръчително четене
- 30+ най-добри урока за селен: Научете селен с реални примери
- Намиране на елемент от селен чрез урок с текст с примери
- Въведение в Selenium WebDriver - Урок № 8 за селен
- Урок за ChromeDriver Selenium: Тестове за Selenium Webdriver в Chrome
- Работа с iFrames с помощта на метод Selenium WebDriver switchTo ()
- Как да създадете проект Gradle със селен
- Как да боравим със сигнали / изскачащи прозорци в Selenium WebDriver - Урок за селен # 16
- Как да се справя с лентата за превъртане в Selenium Webdriver