Take screenshot selenium java

Taking Screenshots With Selenium WebDriver

announcement - icon

The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.

To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.

Connect your cluster and start monitoring your K8s costs right away:

We rely on other people’s code in our own work. Every day.

It might be the language you’re writing in, the framework you’re building on, or some esoteric piece of software that does one thing so well you never found the need to implement it yourself.

The problem is, of course, when things fall apart in production — debugging the implementation of a 3rd party library you have no intimate knowledge of is, to say the least, tricky.

Lightrun is a new kind of debugger.

It’s one geared specifically towards real-life production environments. Using Lightrun, you can drill down into running applications, including 3rd party dependencies, with real-time logs, snapshots, and metrics.

Learn more in this quick, 5-minute Lightrun tutorial:

announcement - icon

Slow MySQL query performance is all too common. Of course it is. A good way to go is, naturally, a dedicated profiler that actually understands the ins and outs of MySQL.

The Jet Profiler was built for MySQL only, so it can do things like real-time query performance, focus on most used tables or most frequent queries, quickly identify performance issues and basically help you optimize your queries.

Critically, it has very minimal impact on your server’s performance, with most of the profiling work done separately — so it needs no server changes, agents or separate services.

Basically, you install the desktop application, connect to your MySQL server, hit the record button, and you’ll have results within minutes:

announcement - icon

DbSchema is a super-flexible database designer, which can take you from designing the DB with your team all the way to safely deploying the schema.

The way it does all of that is by using a design model, a database-independent image of the schema, which can be shared in a team using GIT and compared or deployed on to any database.

And, of course, it can be heavily visual, allowing you to interact with the database using diagrams, visually compose queries, explore the data, generate random data, import data or build HTML5 database reports.

announcement - icon

The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.

To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.

Connect your cluster and start monitoring your K8s costs right away:

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

We’re looking for a new Java technical editor to help review new articles for the site.

1. Overview

When working with automated tests using Selenium, we often need to take a screenshot of a web page or part of a web page. This can be useful, particularly when debugging test failures or verifying our application behaviour is consistent across different browsers.

In this quick tutorial, we’ll look at a couple of ways we can capture screenshots using Selenium WebDriver from our JUnit tests. To learn more about testing with Selenium, check out our great guide to Selenium.

2. Dependencies and Configuration

Let’s start by adding the Selenium dependency to our pom.xml:

 org.seleniumhq.selenium selenium-java 3.141.59 

As always, the latest version of this artifact can be found in Maven Central. Furthermore, the latest version of the Chrome Driver may be downloaded from its website.

Now let’s configure our driver to use Chrome from our unit test:

private static ChromeDriver driver; @BeforeClass public static void setUp() < System.setProperty("webdriver.chrome.driver", resolveResourcePath("chromedriver.mac")); Capabilities capabilities = DesiredCapabilities.chrome(); driver = new ChromeDriver(capabilities); driver.manage() .timeouts() .implicitlyWait(5, TimeUnit.SECONDS); driver.get("http://www.google.com/"); >

As we can see, this is a pretty standard Selenium configuration for a ChromeDriver, which will let us control the Chrome browser running on our local machine. We also configure the time the driver should wait when searching for an element on the page to five seconds.

Finally, before our tests run, we open a favourite web page, www.google.com, in the current browser window.

3. Take a Screenshot of the Viewable Area

In this first example, we’ll look at the TakesScreenShot interface, which Selenium provides out of the box. As the name suggests, we can use this interface for taking screenshots of the viewable area.

Let’s create a simple method for taking screenshots using this interface:

public void takeScreenshot(String pathname) throws IOException

In this concise method, we first convert our driver into a TakesScreenshot using a cast. Then we can call the getScreenshotAs method with the specified OutputType, to create an image file.

After that, we can copy the file to any desired location using the Apache Commons IO copyFile method. Pretty cool! In just two lines, we’re able to capture screenshots.

Now let’s see how we can use this method from a unit test:

@Test public void whenGoogleIsLoaded_thenCaptureScreenshot() throws IOException

In this unit test, we save the resulting image file to our test/resources folder using the filename google-home.png before asserting to see if the file exists.

4. Capturing an Element on the Page

In this next section, we’ll look at how we can capture a screenshot of an individual element on the page. For this, we’ll use a library called aShot, a screenshot utility library that is natively supported by Selenium 3 onwards.

Since aShot is available from Maven Central, we can just include it in our pom.xml:

 ru.yandex.qatools.ashot ashot 1.5.4 

The aShot library provides a Fluent API for configuring how exactly we want to capture are screenshots.

Now let’s see how we can capture the logo from the Google home page from one of our unit tests:

@Test public void whenGoogleIsLoaded_thenCaptureLogo() throws IOException

We start by finding a WebElement on the page using the id hplogo. Then we create a new AShot instance and set one of the built-in shooting strategies – ShootingStrategies.viewportPasting(1000). This strategy will scroll the viewport while we are taking our screenshot for a maximum of one second (1ooo ms).

Now we have the policy for how we want to take our screenshots configured.

When we want to capture a specific element on the page internally, aShot will find an element’s size and position and crop the original image. For this, we call the coordsProvider method and pass a WebDriverCoordsProvider class which will use the WebDriver API to find any coordinates.

Note that, by default, aShot uses jQuery for coordinate resolution. But some drivers have problems with Javascript.

Now we can call the takeScreenshot method passing our driver and logo element, which will, in turn, give us a Screenshot object containing the result of our screen capture. As before, we finish our test by writing an image file and verifying its existence.

5. Conclusion

In this quick tutorial, we’ve seen two approaches to capturing screenshots using Selenium WebDriver.

In the first approach, we saw how to capture the whole screen using Selenium directly. Then we learned how to capture a specific element on the page using a great utility library called aShot.

One of the main benefits of using aShot is that different WebDrivers behave differently when taking screenshots. Using aShot abstracts us away from this complexity and gives us transparent results irrespective of the driver we are using. Be sure to check out the complete documentation to see all the supported features available.

As always, the full source code of the article is available on GitHub.

announcement - icon

Slow MySQL query performance is all too common. Of course it is. A good way to go is, naturally, a dedicated profiler that actually understands the ins and outs of MySQL.

The Jet Profiler was built for MySQL only, so it can do things like real-time query performance, focus on most used tables or most frequent queries, quickly identify performance issues and basically help you optimize your queries.

Critically, it has very minimal impact on your server’s performance, with most of the profiling work done separately — so it needs no server changes, agents or separate services.

Basically, you install the desktop application, connect to your MySQL server, hit the record button, and you’ll have results within minutes:

Источник

Читайте также:  Php error user warning
Оцените статью