一,自动化关键数据
1,关键数据包含
- 代码的执行日志
- 代码执行的截图
- page source(页面源代码)
2,记录关键数据的作用

3,行为日志记录
<!-- pom.xml 日志配置依赖 -->
<!-- slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.7</version>
</dependency>
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.6</version>
</dependency>
- (2)脚本日志级别
- debug记录步骤信息
- info记录关键信息,比如断言等
- 日志配置文件logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- name指定<appender>的名称
class指定<appender>的全限定名 ConsoleAppender的作用是将日志输出到控制台-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 输出时间格式-->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}.%M\(%line\) -- %msg%n</pattern>
</encoder>
</appender>
<logger name="com.ceshiren" level="DEBUG" />
<logger name="com" level="WARN" />
<logger name="ceshiren" level="WARN" />
<logger name="org" level="WARN" />
//默认日志级别
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
package come.ceshiren;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.interactions.Actions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.Duration;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
public class SogoTest {
static Logger log;
static WebDriver driver;
@BeforeAll
static void setupClass() {
log = LoggerFactory.getLogger(SogoTest.class);
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
//创建一个driver对象
driver = new ChromeDriver(options);
//声明隐式等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(6));
}
@AfterAll
static void tearDownClass() throws InterruptedException {
Thread.sleep(5000);
driver.quit();
}
@Test
void test() {
log.debug("搜索测试开始~");
driver.get("https://vip.ceshiren.com/#/ui_study/keypress");
//定位输入框
WebElement element = driver.findElement(By.className("el-input__inner"));
//开始鼠标键盘的操作,输入文本并在键盘上点击回车按键
Actions actions = new Actions(driver);
actions.sendKeys(element, "霍格沃兹")
.sendKeys(Keys.ENTER).build().perform();
//查找输入后键盘操作的结果
WebElement result = driver.findElement(By.className("mb-2"));
String text = result.getText();
log.info("键盘操作的结果:" + text);
assertThat(text,containsString("霍格沃兹"));
}
}
4,步骤截图记录
(1)使用场景
getScreenshotAs(OutputType.FILE)
- 记录关键页面
(2)代码示例
@Test
void screenShot() throws IOException {
driver.get("https://ceshiren.com/");
//(1)当前页面截图
File screenshotAs = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
//保存文件
FileUtils.copyFile(screenshotAs,new File("./image.png"));
//(2)查找到某个元素之后进行截图
driver.findElement(By.id("search-button")).click();
driver.findElement(By.id("search-term")).sendKeys("小柒");
driver.findElement(By.cssSelector(".show-advanced-search")).click();
WebElement element = driver.findElement(By.cssSelector(".topic-title"));
File elementScreenshot = element.getScreenshotAs(OutputType.FILE);
//把定位到的元素进行截图
FileUtils.copyFile(elementScreenshot, new File("./xiaoqi.png"));
}
5,page_source记录
(1)使用场景
- 使用
getPageSource()
方法获取页面源码
- 在调试过程中,如果有找不到元素的错误可以保存当时的page_source调试代码
(2)代码示例
@Test
void pageSource() throws IOException, InterruptedException {
driver.get("https://vip.ceshiren.com/");
//获取pageSource
String pageSource = driver.getPageSource();
//(1)打印日志
// log.info(pageSource);
//(2)将日志保存为文件
FileWriter fileWriter = new FileWriter("./pageSource.txt");
fileWriter.write(pageSource);
//页面变化较多,页面元素可能一直在变化的情况下,可以循环获取页面元素,对比变化
// int i=0;
// while(i<=3){
// sleep(2000);
// String pageSource2 = driver.getPageSource();
// FileWriter fileWriter2 = new FileWriter("./pageSource_"+i+".txt");
// fileWriter2.write(pageSource2);
// i++;
// }
}