本篇将记录下整个脚本制作的心得以及中间踩过的坑
内容介绍
操作流程梳理
类划分
工具方法类划分
各类编码
操作流程数据
该自动化脚本是为了满足一个实际的操作场景而编写的。具体的操作步骤如图:
类的划分
自己拆分了一个工具方法类、一个控制者抽象类、一个接口、两个具体实现类
-
控制者抽象类--->由于使用的是selenium库里面的方法并且用了webdriver驱动。所以需要一个抽象类来指定驱动路径和实例化chromedriver对象并且用这一个对象操作全流程(类似单例设计模式)
-
工具方法类--->从数据库查询出指定字段的数据并且返回回来,由于具体的操作执行一遍的时候只需要一个值,所以直接返回一个结果拿过来使用即可。对方法进行了封装
-
一个接口--->由于登录的操作是固定的,所以登录过程用接口实现。在该接口定义了方法。
-
两个具体实现类--->一个是登录类(实现了登录接口继承了抽象控制类,使用其对象操控浏览器)。另一个是具体操作流程类,继承了登录类,使用一个谷歌对象操控浏览器。
控制者类编码
package testprocess;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
/**
* 这是一个控制者类
* 指定chromedriver在本地的路径
* @since JDK 1.8
* @date 2021/5/18
* @author Lucifer
*/
public abstract class MyChromeDriver {
/*静态代码优先执行*/
static
{
/*指定chromedriver驱动路径*/
System.setProperty("webdriver.chrome.driver","C:/WebDriver/bin/chromedriver.exe");
}
/*实例化ChromeDriver对象*/
WebDriver driver = new ChromeDriver();
}
数据库工具类
package sqlconnection;
import java.io.IOException;
import java.sql.*;
/**
* 数据库连接类--->JDBC
* 从数据库读取指定行的数据
* 写入到指定路径下的文本当中
* @since JDK 1.8
* @date 2021/5/18
* @author Lucifer
*/
public class SQLConnection {
/*定义属性*/
private Statement stmt = null;
private Connection conn = null;
private ResultSet rs = null;
private String user = "www";
private String password = "123456";
private String ip = "192.168.1.20";
private String port = "3306";
private String databaseName = "erpapi";
private String sql = "SELECT qrcodesn from wms_assets_qrcode where `status` = 0";
private String qrecodesn = null;
/**
* 连接数据库的方法
* @throws SQLException
*/
public String startWebDriver() throws SQLException, IOException {
/*加载JDBC驱动类*/
try {
/*反射驱动类*/
Class.forName("com.mysql.jdbc.Diver").newInstance();
}catch (Exception e){
/*显示异常信息*/
System.out.println(e.getMessage());
}
/*连接数据库*/
try {
conn = DriverManager.getConnection("jdbc:mysql://"
+ ip + ":" + port + "/" + databaseName, user, password);
/*判断连接是否成功*/
if (!conn.isClosed()){
System.out.println("数据库连接成功!");
}
}catch (SQLException e){
/*显示异常状态*/
System.out.println("SQLState:" + e.getSQLState());
System.out.println("VendorError:" + e.getErrorCode());
e.printStackTrace();
}
/*创建statement类对象执行sql语句*/
stmt = conn.createStatement();
/*ResultSet类,存储获取的结果集*/
rs = stmt.executeQuery(sql);
try {
/*获取qrcodesn这一列的数据*/
while (rs.next()){
qrecodesn = rs.getString("qrcodesn");
System.out.println(qrecodesn);
}
}catch (Exception e){
e.