You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Katalon无法存储元素列表并执行断言问题求助

Katalon元素抓取与货币符号校验问题修复

问题根源分析

报错的核心原因有三个:

  • 自定义Keyword中错误地将ArrayList对象当作方法调用(list(price)),应该直接传入WebElement对象给WebUI.getText()
  • WebUI.verifyElementText()的参数使用错误,该方法接收的是WebElement和预期文本,且会直接抛出断言失败异常,不能用在if判断中
  • 切换货币后页面元素已更新,但仍使用之前抓取的旧元素列表,导致元素状态过时

修复方案

1. 修正自定义Keyword代码

将错误的方法调用和断言逻辑调整为正确的写法,改用contains判断货币符号,并输出日志:

import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import org.openqa.selenium.WebElement

def checkElements(List<WebElement> list, String currency) {
    for (WebElement price : list) {
        String priceText = WebUI.getText(price)
        if (priceText.contains(currency)) {
            println "Price element contains correct currency symbol: ${currency}"
        } else {
            println "ERROR: This item doesn't have the correct currency symbol. Text found: ${priceText}"
            // 若要中断测试可添加断言失败
            // WebUI.verifyTrue(priceText.contains(currency), "Currency symbol mismatch")
        }
    }
}

2. 调整主测试脚本

切换货币后重新抓取元素列表,确保使用最新的页面元素:

import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.WebElement
import com.kms.katalon.core.webui.driver.DriverFactory
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI

WebUI.openBrowser('https://automationteststore.com/')
WebUI.maximizeWindow()
WebDriver driver = DriverFactory.getWebDriver()

// 定义XPATH为变量,方便复用
def priceXpath = "//div[@class='price']/div[@class='pricenew' or @class='priceold' or @class='oneprice']"

// 初始美元校验
List<WebElement> listPrices = driver.findElements(By.xpath(priceXpath))
CustomKeywords.'checkElement.checkElements'(listPrices, '$')

// 切换为英镑并重新抓取元素校验
WebUI.enhancedClick(findTestObject('Home_Page_Elements/dropdownToggle'))
WebUI.enhancedClick(findTestObject('Home_Page_Elements/dropdownPound'))
listPrices = driver.findElements(By.xpath(priceXpath))
CustomKeywords.'checkElement.checkElements'(listPrices, '£')

// 切换为欧元并重新抓取元素校验
WebUI.enhancedClick(findTestObject('Home_Page_Elements/dropdownToggle'))
WebUI.enhancedClick(findTestObject('Home_Page_Elements/dropdownEuro'))
listPrices = driver.findElements(By.xpath(priceXpath))
CustomKeywords.'checkElement.checkElements'(listPrices, '€')

// 切换回美元并重新抓取元素校验
WebUI.enhancedClick(findTestObject('Home_Page_Elements/dropdownToggle'))
WebUI.enhancedClick(findTestObject('Home_Page_Elements/dropdownDollar'))
listPrices = driver.findElements(By.xpath(priceXpath))
CustomKeywords.'checkElement.checkElements'(listPrices, '$')

WebUI.closeBrowser()

3. 可选:改用Katalon内置方法抓取元素

如果不想直接使用Selenium的findElements,可以创建一个Test Object,将XPATH设置为上述的合并表达式,然后用WebUI.findWebElements方法抓取:

// 替换原有的driver.findElements行
List<WebElement> listPrices = WebUI.findWebElements(findTestObject('TestObjects/AllPriceElements'), 10)

内容的提问来源于stack exchange,提问作者Joao Victor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:23:31