Одним из наиболее эффективных действий любого тестировщика веб-страниц является создание снимка экрана веб-страницы. Всякий раз, когда тестировщик обнаруживает и сообщает об ошибке, эта ошибка не будет воспринята всерьез без поддержки скриншотов или даже видео проблемы. Это в равной степени верно, независимо от типа тестирования, которое вы проводите, и это включает тестирование автоматизации селена.
В автоматизированном тестировании, особенно когда типичный тестовый запуск может включать сотни команд и тестовых случаев, автоматизированные снимки экрана, сделанные при критических утверждениях, важны для разработчиков и тестировщиков, чтобы удостовериться, что каждый тестовый пример выполнен так, как должен. Эти доказательства в свою очередь используются для отладки, чтобы выяснить, что пошло не так, и причину сбоя. Для автоматизированного тестирования с селеном эти снимки экрана помогают определить, являются ли сбои следствием сбоя приложения или скрипта.
С учетом сказанного, когда мы говорим «снимок экрана», мы можем иметь в виду захват изображения любой части экрана, включая изображение рассматриваемого элемента или даже снимок экрана всей страницы. Поэтому в этом посте мы рассмотрим, как можно делать автоматические снимки экрана веб-страниц для различных целей с помощью сценариев автоматизации Selenium WebDriver. Для начала, есть четыре основных способа захвата скриншотов с помощью Selenium Webdriver. Такие как :
- Скриншот области просмотра
- Скриншот всего экрана, т.е. снимок экрана полной веб-страницы
- Скриншот нужного вебэлемента
- Облачная платформа с поддержкой скриншотов AUT
Автоматические тестовые сценарии Selenium для снятия скриншотов видимой области
Это наиболее распространенный подход к автоматизации скриншотов приложений, а также самый простой. Selenium предоставляет готовую возможность, называемую интерфейсом TakeScreenShot, который можно использовать для создания снимков экрана видимой области.
Вы можете проверить детали интерфейса здесь .
Этот интерфейс предоставляет метод, известный как getScreenshotAs, который помогает сделать снимок экрана и сохранить его в нужном месте.
Вот синтаксис для захвата скриншота:
File screenshotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
Чтобы сохранить снятый скриншот в файл, используется следующий оператор:
FileUtils.copyFile(screenshotFile, new File("path of the file you want to save the screenshot to"));
Это оно! Всего два заявления и вы сможете сделать скриншот. Давайте включим этот шаг в фрагмент кода. Приведенный ниже пример демонстрирует пример страницы сведений о пребывании в Airbnb, где мы делаем скриншот видимого экрана:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.concurrent.TimeUnit; 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.chrome.ChromeDriver;import org.testng.annotations.AfterTest;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test; public class ViewableScreenshotExample { WebDriver driver; @BeforeTest public void setupUrl() { System.setProperty("webdriver.chrome.driver", ".\\Driver\\chromedriver.exe"); driver=new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.manage().window().maximize(); } @Test public void performAction() throws InterruptedException { //Scroll down the page JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollBy(0,250)", ""); //open the stay details page driver.findElement(By.xpath("//div[contains(text(), 'Sea Hut Homestay with Aircon')]")).click(); Thread.sleep(1500); //Switch to the required tab ArrayList<String> ta = new ArrayList<String> (driver.getWindowHandles()); int i=ta.size(); System.out.println(i); driver.switchTo().window(ta.get(1)); } @AfterTest public void takeScreenshot() { //take screenshot of the page File src= ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); try { FileUtils.copyFile(src, new File("path of the file")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
Приведенный выше фрагмент кода сделает снимок экрана, который можно просмотреть, как показано ниже:

Это все хорошо и замечательно, если вам нужно сделать снимок экрана с видом, который тестирует ваш код. Однако, если я хочу сделать скриншот всей веб-страницы, вышеупомянутого кода недостаточно. Но у нас есть решение.
Захват полного скриншота веб-страницы с использованием автоматизированных тестовых сценариев Selenium
Может возникнуть необходимость делать скриншоты всего экрана, а не только окна просмотра браузеров. Некоторые браузеры делают снимок экрана только для видимого порта, тогда как другие делают снимок экрана всего экрана. Более ранние версии Firefox делали скриншоты всего экрана, в отличие от Chrome и IE. Но в конечном итоге даже самые последние версии Firefox теперь делают только скриншоты области просмотра. Таким образом, чтобы делать снимки всего экрана с помощью сценариев селенового драйвера, мы можем использовать AShot ().
AShot () — это утилита для создания скриншотов веб-драйверов, которая делает снимок экрана целиком и поддерживается начиная с Selenium 3 и далее. Он обеспечивает следующие функции:
- Помогает захватить весь экран и веб-элемент
- Украсить скриншот
- Обеспечивает сравнение скриншотов.
Более подробную информацию об утилите вы можете найти здесь .
Чтобы сделать скриншот всего экрана, вам нужно добавить банку в ваш проект. Вы можете скачать банку отсюда http://central.maven.org/maven2/ru/yandex/qatools/ashot/ashot/1.5.3/ashot-1.5.3.jar
После того, как банки добавлены в проект, все, что вам нужно сделать, это упомянуть приведенные ниже строки кода, когда вы собираетесь сделать полноэкранный снимок экрана:
|
1
2
|
Screenshot screenshot=new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);ImageIO.write(screenshot.getImage(),"PNG",new File("path of the file")); |
В приведенном ниже коде используется стратегия съемки метода Ашота, когда окно просмотра установлено на весь экран и сделаны снимки экрана. Приведенный ниже фрагмент кода переходит на страницу «Путешествия и туры в Airbnb Индия» и делает снимок экрана с полным просмотром.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import java.io.File;import java.io.IOException;import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test; import ru.yandex.qatools.ashot.AShot;import ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies; public class EntireScreenshot { public static void main(String[] args) { // TODO Auto-generated method stub WebDriver driver; System.setProperty("webdriver.chrome.driver", ".\\Driver\\chromedriver.exe"); driver=new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.manage().window().maximize(); //take screenshot of the entire page Screenshot screenshot=new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver); try { ImageIO.write(screenshot.getImage(),"PNG",new File("path of the file")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } driver.quit(); } } |
Когда вы запустите этот код, обратите внимание, как код автоматически прокручивает страницу вниз и делает снимок экрана всей страницы. Ниже приведен пример снятого скриншота.

Делать скриншоты на полных страницах — это хорошо, но вы можете столкнуться с ситуацией, когда вас интересует только скриншот нужного веб-элемента. Ваша единственная задача — сделать снимок экрана с нужным элементом, а не весь экран. Кроме того, если вы хотите сделать снимки экрана с изображением логотипа или другого конкретного элемента пользовательского интерфейса, чтобы проверить его пикселирование или проблемы с пользовательским интерфейсом, все, что вам нужно, — это взять изображение webElement, а не все изображение экрана. Давайте копаться в том, как сделать скриншот веб-элемента.
Снимок экрана желаемого веб-элемента с помощью Selenium WebDriver
Сделать скриншот нужного элемента тоже довольно просто. Основная концепция заключается в том, чтобы обрезать полный снимок экрана в желаемое место элемента webElement на основе его координат и высоты-ширины. Ниже приведен фрагмент кода, показывающий, как можно сделать снимок экрана только с логотипом сайта Amazon.com.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.apache.commons.io.FileUtils;import org.openqa.selenium.By;import org.openqa.selenium.OutputType;import org.openqa.selenium.Point;import org.openqa.selenium.TakesScreenshot;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.remote.server.handler.FullscreenWindow; public class LogoScreenShotExample { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub System.setProperty("webdriver.chrome.driver", ".\\Driver\\chromedriver.exe"); WebDriver driver=new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.manage().window().maximize(); //locating amazon logo WebElement logo=driver.findElement(By.id("nav-logo")); // Get entire page screenshot File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); BufferedImage fullScreen = ImageIO.read(screenshot); //Find location of the webelement logo on the page Point location= logo.getLocation(); //Find width and height of the located element logo int width= logo.getSize().getWidth(); int height=logo.getSize().getHeight(); //Now the main point, which is cropping the full image to get only the logo screenshot BufferedImage logoImage= fullScreen.getSubimage(location.getX(), location.getY(), width, height); ImageIO.write(logoImage, "png", screenshot); //copy the file to the desired location FileUtils.copyFile(screenshot, new File("path of file")); } } |
Вот изображение, взятое приведенным выше фрагментом кода элемента webElement:

Это оно. Разве это не круто, ребята. Просто выясните, чего хочет ваш тестовый сценарий, и сделайте необходимый снимок экрана. В настоящее время нам не нужно делать снимки экрана из-за того, что многие новые облачные платформы предоставляют поддержку для всех этих снимков экрана и видео для выполнения ваших сценариев автоматизации.
Это подводит меня к моему последнему подходу — сделать снимок экрана, что в конечном итоге означает, что я не снимал один & # 55357; & # 56842; и инструмент делает свою работу. Ну, вы все правильно поняли. Давайте посмотрим на его детали
Делать автоматические скриншоты на полную страницу в облаке
Выполнение тестов локально важно, однако, если вы хотите убедиться, что ваш сайт работает во всех браузерах, даже в тех, к которым у вас нет локального доступа, вам понадобится сервис, такой как LambdaTest . LambdaTest — это облачная сетка селена, которую вы можете использовать для запуска всех ваших сценариев автоматического тестирования селена в Интернете. Лучшая часть сетки LambdaTest, однако, заключается в том, что она делает автоматические снимки экрана вашей веб-страницы после выполнения каждой команды селена. Кроме того, платформа LambdaTest снимает полное видео о выполнении теста. Все, что вам нужно сделать, это запустить ваши сценарии на этой платформе, которая предоставляет вам такие функции, как снимки экрана, видео, сетевые журналы, журналы консоли и так далее. Несколько моментов или предварительных условий для запуска вашего скрипта на платформе:
- Аккаунт LambdaTest
- Имя пользователя LambdaTest, ключ доступа и URL для подключения
- Настройка необходимых свойств для получения доступа к нужным функциям.
Это оно. Теперь давайте запустим наш вышеупомянутый код страницы подробностей Airbnb Stays без необходимости предоставления метода снимка экрана, так как он захватывает все видео выполнения. В приведенном ниже фрагменте кода я буду использовать имя пользователя LambdaTest, ключ доступа и URL-адрес Selenium Grid LambdaTest для подключения к необходимому браузеру и выполнения действий. Обратите внимание, что изменение вышеуказанного кода на код, совместимый с LambdaTest, требуется только для вызова удаленного веб-драйвера вместо локального chrome webdriver и передачи объекта требуемых возможностей, чтобы определить, в каком браузере нужно запускать тесты:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.concurrent.TimeUnit; 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.Platform;import org.openqa.selenium.TakesScreenshot;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.remote.DesiredCapabilities;import org.openqa.selenium.remote.RemoteWebDriver;import org.testng.annotations.AfterTest;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;import java.net.URL; public class LambdatestWithoutScreenShotMethod { public static final String username= "sadhvisingh24"; public static final String auth_key = "X1PLnv28q0eSqWoqaqv9STD4gPRfWnVOisEUcmlW0zg9HO3GYi"; public RemoteWebDriver driver; public static final String URL= "@hub.lambdatest.com/wd/hub"; @BeforeTest public void setupUrl() { DesiredCapabilities capability= new DesiredCapabilities(); capability.setPlatform(Platform.WIN8); capability.setBrowserName("chrome"); capability.setVersion("75.0"); capability.setCapability("build", "cross_browser"); capability.setCapability("name", "cross_browser"); capability.setCapability("network", true);//to enable network logs capability.setCapability("visual", true);//to enable screenshots capability.setCapability("video", true);//to enable video capability.setCapability("console", true);//to enable console logs try { } catch (Exception e) { System.out.println("Invalid grid URL" + e.getMessage()); } try { driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); driver.manage().window().maximize(); } catch (Exception e) { System.out.println(e.getMessage()); } } @Test public void performAction() throws InterruptedException { //Scroll down the page JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollBy(0,250)", ""); //open the stay details page driver.findElement(By.xpath("//div[contains(text(), 'Sea Hut Homestay with Aircon')]")).click(); Thread.sleep(1500); //Switch to the required tab ArrayList<String> ta = new ArrayList<String> (driver.getWindowHandles()); int i=ta.size(); System.out.println(i); driver.switchTo().window(ta.get(1)); } @AfterTest public void closeSetup() { driver.quit(); } } |
Ссылка на скриншот ниже:

На снимке экрана выше, LambdaTest обеспечивает поддержку видео, где вы можете просмотреть весь процесс выполнения вашего веб-приложения.

Помимо этого, LambdaTest также предоставляет автономную функцию полноэкранного автоматического создания снимков экрана, которая может помочь вам делать снимки экрана в браузерах выбранного вами приложения и даже сравнивать их. LambdaTest называет эту функцию «Скриншот тестирования». Вы можете получить доступ к этим скриншотам по мере необходимости и даже поделиться ими с заинтересованными сторонами и отправить их по почте в соответствии с потребностями. Эта функция пригодится, когда вам нужно протестировать приложение в нескольких браузерах и версиях и выполнить кросс-браузерное тестирование . Вы можете делать скриншоты и сравнивать их по любым вопросам интерфейса. Разве это не чудесно и просто представьте, сколько времени вы только что сэкономили.
- Перейдите к заголовку меню «Визуальное тестирование пользовательского интерфейса» LambdaTest и перейдите к его подзаголовку «Снимок экрана», как показано ниже.

- Как только вы дойдете до этой страницы, все, что вам нужно сделать, это поместить URL-адрес, который вы хотите проверить, в заполнитель URL-адреса. Выберите нужный браузер и версию, на которой вы хотите сделать снимок экрана, и просто нажмите кнопку «захват». Бинго, вот и все.
- Изображения для захвата будут добавлены в очередь. После завершения вы можете получить доступ к этим изображениям, как показано ниже:


Как вы видели выше, мы сосредоточились на всех возможных способах делать скриншоты в деталях, поэтому в следующий раз, когда вы застряли на том, как сделать скриншот, эта статья пригодится. Вы также можете сослаться на мои другие статьи как часть этой серии. Счастливого тестирования.

|
Смотрите оригинальную статью здесь: Использование Selenium Webdriver для полной страницы Скриншоты Мнения, высказанные участниками Java Code Geeks, являются их собственными. |