使用Spring Boot来使用Selenide

环境

    • macOS Monterey 12.4

 

    • Google Chrome 103.0.5060.134

 

    • JDK 17.0.1 (Eclipse Temurin)

 

    • Spring Boot 2.7.1

 

    Selenide 6.6.6

Selenide是什么?

听说这是一个使Selenium更易使用的封装库。

官方网站→ https://selenide.org/

添加依赖性

在pom.xml中添加selenide,与spring-boot-starter-test一起。

    <dependencies>
        ...
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.codeborne</groupId>
            <artifactId>selenide</artifactId>
            <version>6.6.6</version>
            <scope>test</scope>
        </dependency>
        ...
    </dependencies>

根据参考文章,过去的Spring Boot版本依赖于Selenium,所以需要重新指定Selenium的版本。但是,至少在Spring Boot 2.7中不再依赖于Selenium,因此不需要这样做了。

Selenide的配置。

在“src/test/resources”文件夹中创建一个名为“selenide.properties”的文件,并按照以下方式写入。

selenide.browser=chrome
selenide.headless=true

请查阅 com.codeborne.selenide.Configuration 类的 Javadoc 来了解有哪些设置项。

编写测试代码

请参考Selenide的官方文档以获取详细的API信息。

package com.example.springmemo.integration;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;

import static com.codeborne.selenide.Selenide.*;
import static com.codeborne.selenide.Condition.*;
import static com.codeborne.selenide.CollectionCondition.*;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MemoIntegrationTest {

    @LocalServerPort
    int port;

    private String url(String path) {
        return "http://localhost:%d%s".formatted(port, path);
    }

    @Test
    @DisplayName("トップページにアクセスしたらメモが3件表示される")
    void test01() {
        open(url("/"));
        String selector = ".tr-memo";
        assertAll(
                () -> $$(selector).shouldBe(size(3)),
                () -> $(selector).shouldBe(matchText("1 あああ \\d{4}年\\d{1,2}月\\d{1,2}日 \\d{1,2}時\\d{1,2}分\\d{1,2}秒"))
        );
    }
}
广告
将在 10 秒后关闭
bannerAds