删除单个元素前后的元素计数校验逻辑咨询及代码问题排查
单元素删除场景的元素数量校验标准逻辑
执行单条元素删除时,数量校验必须遵循「删前取数-执行删除-等渲染/接口返回-删后取数-差值比对」的流程,具体步骤如下:
- 删除操作触发前,先从页面/接口响应中获取当前真实的元素总数量,记为删除前计数
beforeDeleteCount,禁止使用硬编码的固定值做基准 - 触发目标单元素的删除操作,等待删除接口返回200成功状态、或页面DOM完成对应更新(UI自动化场景必须加显式等待,避免读取到未更新的旧数据)
- 删除动作完全生效后,重新拉取最新的元素总数量,记为删除后计数
afterDeleteCount - 执行校验:判断
afterDeleteCount == beforeDeleteCount - 1是否成立,成立则数量校验通过,否则校验失败
原代码存在的核心问题
代码无法达到预期效果,是几个低级错误叠加导致的:
- Java变量命名不合法:变量名不能包含空格,写的
expected count、actual count属于非法命名,代码本身就无法通过编译 - 校验逻辑完全写反:拿删除前拿到的初始计数
actualcount,和自己算出来的实际值-1做相等判断,两个值天生差1,判断条件永远不会成立 - 删除后没有重新获取最新计数:删除操作执行完后,全程没有重新读取页面上的最新元素数量,一直拿着删除前存的旧值做比对,校验逻辑从根上就不成立
- 缺少更新等待逻辑:UI自动化场景下删除操作触发后,页面计数更新需要几十到几百毫秒不等,不加等待直接读值很容易拿到未更新的旧数,导致校验误判
修正后的参考实现
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.time.Duration; class HelloWorld { public static void main(String[] args) { // 初始化驱动(替换为实际的驱动初始化逻辑) WebDriver driver = new ChromeDriver(); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); // 替换为页面上实际的计数元素定位规则 By orderCountLocator = By.id("order-count"); // 第一步:删除前获取初始元素数量 WebElement countBeforeEle = driver.findElement(orderCountLocator); String[] beforeCountText = countBeforeEle.getText().split(" "); int beforeDeleteCount = Integer.parseInt(beforeCountText[0]); System.out.println("删除前元素总数:" + beforeDeleteCount); // 第二步:执行单元素删除操作(替换为实际的删除逻辑) // ... 省略删除按钮点击、确认删除等操作代码 ... // 第三步:等待页面计数更新到预期值,避免读取旧数据 wait.until(ExpectedConditions.textToBePresentInElementLocated( orderCountLocator, String.valueOf(beforeDeleteCount - 1) )); // 第四步:删除完成后重新获取最新元素数量 WebElement countAfterEle = driver.findElement(orderCountLocator); String[] afterCountText = countAfterEle.getText().split(" "); int afterDeleteCount = Integer.parseInt(afterCountText[0]); System.out.println("删除后元素总数:" + afterDeleteCount); // 第五步:执行数量校验 int expectedCount = beforeDeleteCount - 1; if (afterDeleteCount == expectedCount) { System.out.println("校验通过,删除后书签数量为:" + afterDeleteCount); } else { throw new RuntimeException(String.format("校验失败,预期数量%d,实际数量%d", expectedCount, afterDeleteCount)); } driver.quit(); } }
内容的提问来源于stack exchange,提问作者Tarun Kumar Srikonda
相关产品推荐
相关产品推荐

