Springboot集成Selenium

1. 介绍Selenium

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。

2. 简单Demo

  1. 下载驱动chromedriver
    request
    1
    2
    -- 根据自己chrome的版本并下载相对应的驱动
    http://chromedriver.storage.googleapis.com/index.html
  1. 配置chromedriver

    Window配置:下载好后解压放到你喜欢的位置,放到D:\Program Files\ChromeDriver文件夹下,记好这个路径配置要用到。接着右键我的电脑==>属性==>高级系统设置==>环境变量==>选中系统变量中的Path,点击编辑,点击新建,把前面提到的文件路径添加进去,点击确定至窗口关闭。

    Mac: 使用终端打开即可。

  2. 引入依赖,依赖包下载地址

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.8.2</version>
    </dependency>

    <!-- 用到了@WithMockUser注解 -->
    <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
    </dependency>

    <!-- 解决报错:com.google.common.util.concurrent.SimpleTimeLimiter.create(Ljava/util/concurrent/ExecutorService;)Lcom/google/common/util/concurrent/SimpleTimeLimiter; -->
    <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
    </dependency>
  3. 编写测试类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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
    @RunWith(SpringRunner.class)
    //设置测试端口号
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = {"server.port=1000"})
    public class SeleniumTest {

    @Autowired
    private TestRestTemplate restRestTemplate;

    private static ChromeDriver driver;

    @BeforeClass
    public static void openBrowser() {
    //初始化参数,chromeDriver驱动包的路径
    System.setProperty("webdriver.chrome.driver", "/Users/xiaoyuge/Desktop/browser/chromedriver");
    driver = new ChromeDriver();
    // 最大化浏览器
    driver.manage().window().maximize();
    //加载URL
    driver.get("http://localhost:8082/mpg/login/auth1");
    //等待加载完成
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    @AfterClass
    public static void closeBrowser() {
    driver.quit();
    }

    @Test
    public void loginTest() {
    //获取页面元素
    WebElement username = driver.findElementById("username");
    WebElement password = driver.findElementById("password");
    WebElement submit = driver.findElementByClassName("btn");
    username.sendKeys("admin");
    password.sendKeys("admin1");
    //提交表单
    submit.click();
    //获取cookies
    Set<org.openqa.selenium.Cookie> cookies = driver.manage().getCookies();
    System.out.println("Size: " + cookies.size());
    Iterator<Cookie> itr = cookies.iterator();
    CookieStore cookieStore = new BasicCookieStore();

    while (itr.hasNext()) {
    Cookie cookie = itr.next();
    BasicClientCookie basicClientCo = new BasicClientCookie(cookie.getName(), cookie.getValue());
    basicClientCo.setDomain(cookie.getDomain());
    basicClientCo.setPath(cookie.getPath());
    cookieStore.addCookie(basicClientCo);
    }
    //如此便能拿到登录后的cookie,后续需要访问该网站其他网页,只需将拿到的cookie放到请求中“骗过”服务器即可
    }

    @Test
    @WithMockUser(username = "admin", password = "admin1")
    public void getData() {
    DataSources dataSources = restRestTemplate.getForObject("", DataSources.class);
    Assert.assertEquals("22", dataSources.getName());
    }
    }