_selenide
TL;DR - Show Me The Code
package com.elemental.selenium;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.File;
import static com.codeborne.selenide.Selectors.byText;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.open;
import static org.assertj.core.api.Assertions.assertThat;
public class DownloadTest {
@BeforeEach
public void openAUT() {
open("https://selenide.org/test-page/download.html");
}
@Test
public void downloadFile() {
File file = $(byText("hello-world.txt")).download();
assertThat(file).hasName("hello-world.txt");
assertThat(file).content().contains("Hello, world!");
}
}
Code Walkthrough
Importing Libraries
First, we pull in our requisite classes:
- test runner (e.g.,
org.junit.jupiter.api.BeforeEach
, etc.), - opening the browser with Selenide (e.g.,
com.codeborne.selenide.Selenide.open
), - matchers for assertions (e.g.,
org.assertj.core.api.Assertions.assertThat
)
NB! You don't need to add the typical "selenium*" dependencies.
Just one dependency is enough: com.codeborne:selenide
.
It will pull down all the needed Selenium dependencies automatically.
Setup and Teardown
Next, we are setting up the browser instance. The openAUT
opens the application under test before
each test.
The Test
Our downloadFile
test, after visiting the page, we find the download link and call method download
for it.
This method does its magic and returns the downloaded file. Now you can verify its name or content.
NB! You don't need to find the downloaded file in any directories. Method $.download()
returns the file. It's
already available for you, so you can verify it right away.
More About Downloading Files in Selenide
Selenide sample for downloading files is straightforward because Selenide does all the work for you:
- creates a uniquely named temp directory
- configures the browser to make it automatically download files to that unique directory
- clicks a web element
- waits until the file arises in the downloads folder
In addition, Selenide has more ways to download files:
HTTPGET
(default one)FOLDER
CDP
PROXY
Learn more about downloading files in Selenide from Andrei Solntsev's YouTube video and blog post.
Executing the Test
Before executing the test, we need to make sure the required dependencies are declared on the pom.xml
file.
Toggle to see the pom.xml
file.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.elemental.selenium</groupId>
<artifactId>tips-selenide-download-file</artifactId>
<version>1.0.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>7.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.11.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.26.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.16</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Finally, we can run the test by executing mvn test
from the command-line.