自动化测试脚本批量语言增删逻辑异常问题排查求助
脚本问题定位咨询
需求逻辑
- 添加语言前:遍历Future File中的所有语言,检查网站页面的语言列表,若存在则勾选复选框删除该语言,直至Future File中的语言全部从页面移除。
- 完成删除后,将Future File中的这些语言重新添加到页面。
问题现状
按上述逻辑编写代码后,脚本执行时存在异常,已困扰两天无法解决。
测试数据(Future File)
|Name| |German| |Turkish| |Spain|
测试代码
public void adminAddMultipleLanguageFromDatatable(io.cucumber.datatable.DataTable dataTable) throws InterruptedException { List<WebElement> Languages = driver.findElements(By.xpath("//table/tbody/tr/td[2]")); List<Map<String, String>> data = dataTable.asMaps(); for (Map<String, String> datas : data) { for (int i = 0; i < Languages.size(); i++) { String dataName = datas.get("Name"); String name = Languages.get(i).getText(); if (dataName.equalsIgnoreCase(name)) { WebElement checkBox = driver.findElement(By.xpath("//table/tbody/tr[" + (i + 1) + "]/td[1]")); click(checkBox); click(addLanguagePage.languageDelBtn); WebElement mes = driver.findElement(By.xpath("//div[@class='message warning fadable']")); String m = "Successfully Deleted\n" + "Close"; String m1 = mes.getText(); Assert.assertEquals(m, m1); } click(addLanguagePage.languageAddBtn); sendText(datas.get("Name"), addLanguagePage.languageNameOption); click(addLanguagePage.languageSaveBtn); WebElement m2 = driver.findElement(By.xpath("//div[@class='message success fadable']")); String mm2 = m2.getText(); String expecct = "Successfully Saved\n" + "Close"; Assert.assertEquals(expecct, mm2); } } }
问题咨询
请帮忙定位该脚本中的问题所在?
脚本问题定位分析
- 元素过期失效:初始获取的
Languages列表是页面加载时的元素集合,删除语言后页面DOM更新,旧的元素引用会失效,后续访问Languages.get(i)会触发StaleElementReferenceException。 - 逻辑流程颠倒:当前代码遍历每个测试数据时,会在遍历语言列表的循环里立刻执行添加操作,不符合“先全部删除目标语言,再统一添加”的需求,导致删除和添加操作混乱。
- 索引定位错误:删除语言后,表格行的索引会动态变化,用初始的
i+1定位复选框,会出现定位到错误行或找不到元素的情况。 - 无等待直接断言:删除、添加操作后直接查找提示元素,没有设置显式等待,可能元素未加载完成就获取文本,引发断言失败或
NoSuchElementException。 - 代码拼写错误:变量
expecct拼写错误,应为expect,属于代码规范问题。
内容的提问来源于stack exchange,提问作者Ziko Mudin
相关产品推荐
相关产品推荐

