“E抽奖”Web自动化测试报告
2026/6/10 9:46:19 网站建设 项目流程

一、测试环境

系统:Win11

浏览器:Microsoft Edge 版本 148.0.3967.96 (正式版本) (64 位)

Web Driver:

测试工具:Selenium

二、测试目的

完成功能测试中的所有用例,在版本更新时,解放双手,减少在实际情况中收获往往较少的手动/探索性测试。

最重要的是可以规范化测试,系统性地对测试记录进行截图留存,使错误可溯源。

三、测试用例

根据自动化测试的目的,优先挑选重复性高、复杂度高、重要性高的测试进行自动化,我们选择对登录功能、创建奖品功能、抽奖功能进行自动化web测试。

四、代码编写与测试存档

我们选择较为简单但具有代表性的loginpage类进行展示(其中的import已被删除)

package tests; /** * @author: xcz */ public class LoginPage extends Utils { public static String url = "http://101.200.132.203:8080/blogin.html"; public LoginPage() { super(url); // 浏览器窗口最大化(需要在 driver 初始化之后调用) driver.manage().window().maximize(); } /* 检查页面是否加载成功 */ public void loginPageRight() { WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#loginForm"))); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#loginForm > button"))); } public void LoginTobackend() throws IOException { WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 等待用户名输入框可见并清空、输入 wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#phoneNumber"))).clear(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#phoneNumber"))).sendKeys("18888888888"); // 等待密码输入框可见并清空、输入 wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#password"))).clear(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#password"))).sendKeys("123456"); // 等待登录按钮可点击并点击 wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#loginForm > button"))).click(); // 等待登录成功后某个关键元素出现(例如侧边栏的 ul),确保页面跳转完成 wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.cont-box > div.sidebar > ul"))); // 通过页面标题验证是否登录成功 String expect = driver.getTitle(); assert expect.equals("后台管理"); } /* 检查登录功能 --- 成功登录 */ public void LoginSuc() throws IOException { WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 等待用户名输入框可见并清空、输入 wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#phoneNumber"))).clear(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#phoneNumber"))).sendKeys("18888888888"); // 等待密码输入框可见并清空、输入 wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#password"))).clear(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#password"))).sendKeys("123456"); // 等待登录按钮可点击并点击 wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#loginForm > button"))).click(); // 等待登录成功后某个关键元素出现(例如侧边栏的 ul),确保页面跳转完成 wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("body > div.cont-box > div.sidebar > ul"))); // 通过页面标题验证是否登录成功 String expect = driver.getTitle(); assert expect.equals("后台管理"); getScreenShot(); driver.navigate().back(); // 返回后等待页面加载(可选) wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#loginForm"))); } /* 检查登录功能 --- 登录失败(预期弹出 Alert) */ public void LoginFail() throws IOException, AWTException { WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 刷新页面(确保输入框无残留文本) driver.navigate().refresh(); // 等待刷新后的页面元素可见 wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#phoneNumber"))); // 输入错误的用户名和密码 driver.findElement(By.cssSelector("#phoneNumber")).sendKeys("18888888888"); driver.findElement(By.cssSelector("#password")).sendKeys("123455"); driver.findElement(By.cssSelector("#loginForm > button")).click(); getScreenShotWithAlert(); } }

测试自动截图举例

采取日期+模块分类,便于寻找错误

五、遇到的问题&&解决办法&&收获

1.使用selenium工具的webdriver类的“getScreenshotAs”方法,只能截取html页面内的内容,无法截取到浏览器的alert窗口,我们选择使用AWT包中的Robot类来模拟鼠标操作,进行显示器画面截图,由于在测试登录页面时,已经将浏览器页面最大化,所以能截到完整的图片。

Robot robot = new Robot(); Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); BufferedImage screenFull = robot.createScreenCapture(screenRect);

2.测试新建奖品功能时,忘记了右侧显示页面是通过<iframe>嵌入的html页面,导致我在没有进行.switchto操作时就尝试等待“submit”按钮至可操作,这显然是做不到的,因为我的webdriver仍停留在主页面,仅能找到嵌入的html页面,但是无法查看其内部的元素。

3.`Utils`类的`WebDriverWait`在`driver`初始化前被实例化导致空指针异常,且多个页面类继承`Utils`后各自创建了新的浏览器实例,引发重复窗口和未登录弹窗冲突。我发现了我在addprizepage和Lottery里面多new了一次driver导致自动创建了新的页面。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询