how take screenshot selenium
이 튜토리얼에서는 Selenium 스크린 샷의 중요성과 예제를 통해 Selenium 애플리케이션에서 Ashot을 사용하여 스크린 샷을 찍는 방법을 설명합니다.
스크린 샷은 기본적으로 버그 분석에 사용됩니다. 응용 프로그램이 사용자 요구 사항에 따라 작동하는지 여부를 이해하는 데 도움이됩니다.
모든 테스트 케이스에 대해 수신 된 출력이 다를 수 있으며, 때로는 올바른 출력이 수신되고, 때로는 오류가 발생하고, 때로는 입력 데이터가 누락되거나 불충분하여 오류 메시지가 수신됩니다. 스크린 샷은 작업 / 출력 증명을 추적하는 데 도움이됩니다. 받았습니다.
이 자습서에서는 Selenium 스크린 샷이 필요한 위치를 알아 봅니다. Ashot에 대해 논의하고 Selenium에서 Ashot을 사용하는 방법 (ashot ()의 설치 및 구성), Selenium에서 스크린 샷 캡처 방법 (전체 웹 페이지, 페이지의 단일 요소 및 현재 열려있는 창에 대해 2 이미지) 그리고 스크린 샷이 자주 캡처되는 몇 가지 예를 살펴 봅니다.
학습 내용 :
셀레늄 스크린 샷 이해
위 이미지는 Gmail 웹 사이트에서 코드를 실행하는 동안 캡처 한 스크린 샷의 예입니다. 이미지는 사용자가 올바른 사용자 이름과 비밀번호를 사용하여 이메일 계정에 성공적으로 로그인했는지 확인하는 데 도움이됩니다.
따라서 스크린 샷은 작업 수행 후 수신 된 작업 / 출력을 캡처하는 데 매우 유용하므로 문제없이 수행중인 작업을 확인하는 데 도움이됩니다.
Selenium은 자동으로 스크린 샷을 찍을 수 있습니다. 스크린 샷이 필요한 코드 실행 과정에서 스크린 샷용 코드 만 추가하면됩니다.
셀레늄 스크린 샷이 필요한 곳
다음과 같은 가능성이 있습니다.
- 웹 페이지에서 요소를 찾는 데 문제가있을 때.
- 페이지에서 웹 요소를 찾는 데 시간 초과가있는 경우.
- 시스템 / 애플리케이션에 오류 또는 문제가 발생한 경우.
- 어설 션 실패가 발생했을 때.
Ashot이란?
Ashot ()은 스크린 샷을 캡처하기 위해 Selenium 웹 드라이버에서 지원하는 타사 유틸리티입니다.
Ashot ()은 스크린 샷 캡처시 다음과 같은 작업을 제공합니다.
- 전체 페이지 캡처
- 웹 요소 캡처
- 이미지 비교
다음 섹션에서 이것이 정확히 어떻게 작동하는지 살펴 보겠습니다.
Ashot의 특징 :
- 전체 페이지의 스크린 샷을 찍을 수 있습니다.
- Android Emulator Browser, iOS Simulator Mobile Safari, 다양한 데스크톱 브라우저와 같은 다양한 플랫폼에서 지원되는 웹 요소의 스크린 샷도 찍을 수 있습니다.
- 유연한 스크린 샷 비교를 제공합니다.
- 스크린 샷을 장식합니다.
Ashot은 세 단계로 스크린 샷을 찍을 수 있습니다.
오라클 SOA 인터뷰 질문과 경험에 대한 답변
- 전체 페이지의 스크린 샷을 캡처합니다.
- 요소의 크기와 위치를 찾으십시오.
- 원본 스크린 샷을 자릅니다.
셀레늄에서 Ashot을 어떻게 사용할 수 있습니까?
컴퓨터에서 Ashot을 다운로드하고 구성하려면 다음 단계를 고려하십시오.
- 다음으로 이동 링크.
- Ashot에 대한 최신 버전의 jar 파일을 찾으십시오.
- 머신의 특정 경로에 jar 파일을 다운로드하고 저장합니다.
- 이제 Eclipse에서 프로젝트에 jar 파일을 추가하려면 프로젝트로 이동 –> 마우스 오른쪽 버튼 클릭 –> 속성으로 이동-> 빌드 경로 선택-> 라이브러리-> 외부 jar 추가
- 다운로드 한 jar 파일이 저장된 경로를 찾습니다.
- jar 파일을 선택하고 적용을 클릭 한 다음 닫습니다.
셀레늄에서 스크린 샷을 캡처하는 방법
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) 전체 웹 페이지
Selenium webdriver의 Ashot을 사용하여 전체 페이지의 스크린 샷을 캡처하기위한 아래 구현 코드를 살펴 보겠습니다. 이를 위해 다음 페이지 (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) 웹 요소
웹 페이지에서 특정 웹 요소의 스크린 샷을 캡처하기 위해 Selenium webdriver에서 Ashot을 사용하여 아래 구현 코드를 살펴 보겠습니다.
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) 원본 이미지와 스크린 샷 비교
웹 페이지에서 로고 요소의 스크린 샷을 캡처하고 원본 로고와 비교하기 위해 Selenium webdriver에서 Ashot을 사용하여 아래 구현 코드를 살펴 보겠습니다.
이를 위해 우리는 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) 로그 아웃 확인
웹 사이트에 로그인하려면 웹 사이트에 로그인 한 후 올바른 사용자 이름과 비밀번호를 입력해야합니다. 그런 다음 사용자가 필요한 옵션을 수행하고 작업이 끝나면 사용자는 로그 아웃됩니다.
따라서 로그 아웃 후 스크린 샷 코드를 제공하면 로그 아웃 동작을 확인하는 로그인 페이지가 다시 표시됩니다. 자세한 내용은 아래 이미지를 참조하십시오.
Windows 10 용 최고의 무료 파일 변환기
# 2) 새로 생성 된 레코드 확인
새 레코드를 만든 후 스크린 샷용 코드를 추가하면 레코드가 성공적으로 생성되었음을 확인합니다. 자세한 내용은 아래 스크린 샷을 참조하십시오.
레코드가 생성되지 않은 경우 코드는 스크린 샷 캡처를 더 이상 진행하지 않으며 레코드가 성공적으로 생성되지 않았 음을 확인합니다.
# 3) 출력 누락 / 잘못된 예
이 예에는 OrangeHRM 웹 사이트에서 직함에 대한 새 레코드를 만드는 것이 포함됩니다. 여기서 직함 필드는 '*'로 표시되어 필수 필드임을 의미합니다. 따라서 필수 필드가 채워질 때까지 레코드가 생성되지 않고 레코드를 저장할 수 있습니다. 자세한 내용은 아래 스크린 샷을 참조하십시오.
결론
따라서이 기사에서 Selenium 스크린 샷이 필요한 곳, Selenium에서 스크린 샷을 처리하는 방법, Ashot이 무엇인지, Selenium에서 다운로드, 구성 및 실제로 사용하는 방법을 살펴 보았습니다. 우리는 스크린 샷 처리를위한 코드 구현을 이해했으며 스크린 샷이 자주 캡처되는 몇 가지 예도 확인했습니다.
추천 도서
- 30 개 이상의 최고의 셀레늄 튜토리얼 : 실제 예제로 셀레늄 배우기
- 예제와 함께 텍스트 자습서로 셀레늄 찾기 요소
- Selenium WebDriver 소개 – Selenium Tutorial # 8
- ChromeDriver Selenium 자습서 : Chrome에서 Selenium Webdriver 테스트
- Selenium WebDriver switchTo () 메서드를 사용하여 iFrame 처리
- Selenium으로 Gradle 프로젝트를 만드는 방법
- Selenium WebDriver에서 경고 / 팝업을 처리하는 방법-Selenium Tutorial # 16
- Selenium Webdriver에서 스크롤 막대를 처리하는 방법