jck28 - 小柒 - selenium - 自动化关键数据记录

一,自动化关键数据

1,关键数据包含

  • 代码的执行日志
  • 代码执行的截图
  • page source(页面源代码)

2,记录关键数据的作用

image

3,行为日志记录

  • (1)日志配置
    • 导入依赖
<!-- 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>
  • (3)代码示例
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++;
//        }
    }