【问题标题】:groovy/katalon: Validate sequence of listgroovy/katalon:验证列表序列
【发布时间】:2021-12-10 05:50:38
【问题描述】:

我有两个列表:

def listA = ['2', '3', '4.5', '5', '6.5', '7', '7.5', '8']
def listB = ['10', '11', '13', '1', '2', '2.5']

我想验证两个列表的顺序。对于 listA,每个当前元素都小于下一个元素,因此我有以下循环。

double previous = 0.0
for (int i = 0; i < listA.size(); i++) {
    double current = Double.parseDouble(listA.get(i))
    if (previous >= current) {
        KeywordUtil.markFailed("previous=${previous}, current=${current} not in order")
    }
        previous = current
    }

上面的代码对listA正确工作。

但我被困在如何验证第二个列表上。要求是从 10 到 13.5 的元素应该按顺序排列,但在 13.5 之后,应该有 '1'。

listB 是动态的。有时是['11.5', '2', '3'],有时是['12', '2'] 或任何其他组合。无论列表是什么,它都应该始终遵循10-13.5 and then 1-3的顺序

更新 我会尝试更好地解释要求。所以基本上我正在测试图片中显示的产品的尺寸顺序。

所以我正在测试不同的网站和不同的产品。每种产品都有不同的尺寸可供选择。大多数产品的尺寸都会按数字顺序排列,例如当前尺寸会小于下一个尺寸。对他们来说,上面的 for 循环就可以了。

但对于某些类别,如“小孩子”,要求尺寸应按顺序排列 --> 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 1, 1.5, 2, 2.5, 3。现在,其中一些产品可能缺少某些尺寸,但无论有什么尺寸,它们都应遵循上述顺序。例如,如果有 12 和 2 尺寸可用,则应按该顺序排列,而不是 2 和 12。同样,如果有 13、1 和 3 尺寸可用,则应按该顺序排列,而不是 1、3、13

【问题讨论】:

  • "要求从 10 到 13.5 的元素应该是按顺序排列的,但是在 13.5 之后,应该有 '1'。" - 是不是1即使不在输入中也应该在输出中?
  • @JeffScottBrown 我在问题中添加了更多细节

标签: java list selenium-webdriver groovy katalon-studio


【解决方案1】:

不确定我是否正确理解了您的要求(尤其是关于 listB),但我会使用如下排序实现这两项检查:

  1. 这里我使用toSorted(),它基于Comparator 创建一个新列表,表示为闭包{}。比较器比较转换为双精度的值。将排序后的列表与原始列表进行比较,如果发生重新排序 -> 列表不符合规则:
boolean checkA( list ){
  list == list.toSorted{ it.toDouble() }
}

assert checkA( [ '2', '3', '4.5', '5', '6.5', '7', '7.5', '8' ] )
assert !checkA( [ '2', 1, '3', '4.5', '5', '6.5', '7', '7.5', '8' ] )
  1. 这里我使用相同的方法,但比较器基于WEIGHTS 列表中每个元素的索引工作,因此按WEIGHTS 对原始列表进行排序。
def WEIGHTS = [ 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 1, 1.5, 2, 2.5, 3 ]*.toDouble().asImmutable()

def checkB = { list ->
  list == list.toSorted{ WEIGHTS.indexOf it.toDouble() }
}

assert checkB( ['10', '11', '13', '1', '2', '2.5'] )
assert checkB( ['11.5', '2', '3'] )
assert checkB( ['12', '2'] )
assert !checkB( ['11', '10', '1', '13', '2', '2.5'] )
assert !checkB( ['1', '12', '3'] )

【讨论】:

  • 我已经用更多上下文更新了原始问题。请看一看。
  • 那就更简单了。您只需使用带有有序值的列表进行比较。我的回答是WEIGHTS
  • 我无法在我的方法中调用 use this。它说这里不需要方法定义。
  • 把它变成一个闭包
  • 查看更新...
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 2012-05-23
  • 2021-12-13
  • 2019-12-10
  • 2021-08-06
  • 1970-01-01
  • 2013-06-04
  • 2017-11-09
相关资源
最近更新 更多