Spring Boot集成selenium实现自动化测试

张开发
2026/4/15 19:43:11 15 分钟阅读

分享文章

Spring Boot集成selenium实现自动化测试
1.什么是seleniumSelenium 是支持web浏览器自动化 的一系列工具它提供了扩展来模拟用户与浏览器的交互用于扩展浏览器分配的分发以及用于实现W3C WebDriver 规范 的基础结构 该规范允许您为所有主要Web 浏览器编写可互换的代码。 Selenium 不仅仅是一个工具或 API, 它还包含许多工具。WebDriver如果您开始使用桌面网站测试自动化, 那么您将使用 WebDriver APIs. WebDriver 使用浏览器供应商提供的浏览器自动化 API 来控制浏览器和运行测试。这就像真正的用户正在操作浏览器一样。由于 WebDriver 不要求使用应用程序代码编译其 API, 因此它本质上不具有侵入性. 因此, 您测试的应用程序与实时推送的应用程序相同。Selenium IDESelenium IDE (Integrated Development Environment 集成是用来开发 Selenium测试用例的工具。 这是一个易于使用的 Chrome 和 Firefox 浏览器扩展, 通常是开发测试用例最有效率的方式。 它使用现有的 Selenium 命令记录用户在浏览器中的操作, 参数由元素的上下文确定。 这不仅节省了开发时间, 而且是学习 Selenium 脚本语法的一种很好的方法。GridSelenium Grid允许您在不同平台的不同机器上运行测试用例. 可以本地控制测试用例的操作, 当测试用例被触发时, 它们由远端自动执行. 当开发完WebDriver测试之后, 您可能需要在多个浏览器和操作系统的组合上运行测试. 这就是 Grid 的用途所在。2.代码工程实验目标1打开chrome自动输入Google网页并进行搜索2对搜索结果截图并保存3关闭浏览器pom.xml?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd parent artifactIdspringboot-demo/artifactId groupIdcom.et/groupId version1.0-SNAPSHOT/version /parent modelVersion4.0.0/modelVersion artifactIdSelenium/artifactId properties maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target selenium.version3.141.59/selenium.version webdrivermanager.version4.3.1/webdrivermanager.version testng.version7.4.0/testng.version /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-autoconfigure/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency !-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -- dependency groupIdorg.seleniumhq.selenium/groupId artifactIdselenium-java/artifactId version${selenium.version}/version /dependency !-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -- !-- https://github.com/bonigarcia/webdrivermanager-- dependency groupIdio.github.bonigarcia/groupId artifactIdwebdrivermanager/artifactId version${webdrivermanager.version}/version /dependency !-- https://mvnrepository.com/artifact/org.testng/testng -- dependency groupIdorg.testng/groupId artifactIdtestng/artifactId version${testng.version}/version scopetest/scope /dependency /dependencies /project测试主类package com.et.selenium; import com.et.selenium.page.google.GooglePage; import com.et.selenium.util.ScreenShotUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.testng.Assert; import org.testng.annotations.Test; import java.io.IOException; public class GoogleSearch1Test extends SpringBaseTestNGTest { Autowired private GooglePage googlePage; Lazy // only create the object when needed Autowired private ScreenShotUtil screenShotUtil; Test public void GoogleTest() throws IOException, InterruptedException { this.googlePage.goToGooglePage(); Assert.assertTrue(this.googlePage.isAt()); this.googlePage.getSearchComponent().search(spring boot); Assert.assertTrue(this.googlePage.getSearchResult().isAt()); Assert.assertTrue(this.googlePage.getSearchResult().getCount() 2); System.out.println(Number of Results: this.googlePage.getSearchResult().getCount()); // wait 3 seconds Thread.sleep(3000); //take screenshot this.screenShotUtil.takeScreenShot(Test.png); this.googlePage.close(); } }打开google网页package com.et.selenium.page.google; import com.et.selenium.annotation.Page; import com.et.selenium.page.Base; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; // this is the main page class that uses search componet and search results componet Page // using custom annotation created; src/main/java/com/demo/seleniumspring/annotation/Page.java public class GooglePage extends Base { Autowired private SearchComponent searchComponent; Autowired private SearchResult searchResult; Value(${application.url}) private String url; //launch website public void goToGooglePage(){ this.driver.get(url); } public SearchComponent getSearchComponent() { return searchComponent; } public SearchResult getSearchResult() { return searchResult; } Override public boolean isAt() { return this.searchComponent.isAt(); } public void close(){ this.driver.quit(); } }搜索“ Spring Boot”关键字package com.et.selenium.page.google; import com.et.selenium.annotation.PageFragment; import com.et.selenium.page.Base; import org.openqa.selenium.Keys; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import java.util.List; PageFragment// using custom annotation created; src/main/java/com/demo/seleniumspring/annotation/PageFragment.java public class SearchComponent extends Base { FindBy(name q) private WebElement searchBox; FindBy(namebtnK) private ListWebElement searchBtns; public void search(final String keyword) { this.searchBox.sendKeys(keyword); this.searchBox.sendKeys(Keys.TAB); // CLICK first search button this.searchBtns .stream() .filter(e - e.isDisplayed() e.isEnabled()) .findFirst() .ifPresent(WebElement::click); } Override public boolean isAt() { return this.wait.until(driver1 - this.searchBox.isDisplayed()); } }搜索结果截图package com.et.selenium.util; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import org.springframework.util.FileCopyUtils; import java.io.File; import java.io.IOException; import java.nio.file.Path; Lazy Component public class ScreenShotUtil { Autowired private TakesScreenshot driver; // location of screenshot file Value(${screenshot.path}) private String path; public void takeScreenShot(final String imgName) throws IOException { // takes screenshot as saves to path in app properties file using given imgName ex. test.png if (System.getenv(CLOUD_RUN_FLAG) null) { try { File sourceFile this.driver.getScreenshotAs(OutputType.FILE); File targetfile new File(path/imgName); FileCopyUtils.copy(sourceFile, targetfile); System.out.println(Saving screenshot to path); } catch (Exception e) { System.out.println(Something went wrong with screenshot capture e); } } } }关闭chrome浏览器this.googlePage.close();最后下方这份完整的软件测试 视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。

更多文章