在Geb中选择随机下拉值

时间:2013-11-20 22:59:28

标签: grails automated-tests geb

我想在我的测试中选择一个随机HTML选择选项,但是这些选项是动态生成的,并且在运行测试时它们的ID不一定清晰。

我正在使用页面对象和内容DSL(实际上只是将表单定义为form { $("form") },因为我遇到了其他问题),而且我知道我可以为form.dropdown分配特定的ID或文本值控制,但我不确定这个下拉列表中获取所有下拉值ID列表(或者更好的是它们的名称映射)的最简单方法是什么。

我到目前为止只是尝试检查form.dropdown的类型,但它被报告为ArrayList并包含空值,因此不太有用。

我已阅读Geb指南,但未能找到我认为相关部分的良好解决方案:

http://www.gebish.org/manual/current/all.html#setting_values

FWIW我正在使用Groovy / Grails和Firefox WebRunner。

2 个答案:

答案 0 :(得分:1)

这就是我这样做的方式。有这种形式:

<form id="myform">
    <select name="dropdown">
        <option value="a">A</option>
        <option value="b">B</option>
        <option value="c">C</option>
    </select>
</form>

首先得到选项,为简单起见:

def options = $('#myform select[name="dropdown"] option')

然后,以这种方式生成随机索引:

int numOptions = options.size()
int randomIndex = System.currentTimeMillis() % numOptions

最后,因为我还没有找到如何通过索引设置选项,我按值设置:

String randomValue = options[randomIndex].value()
$('#myform').dropdown = randomValue

或者,长话短说,

def options = $('#myform select[name="dropdown"] option')
$('#myform').dropdown = options[(System.currentTimeMillis() % options.size()) as int].value()

我们也可以从OPTION中引用SELECT,避免不必要的CSS选择:

def options = $('#myform select[name="dropdown"] option')
options.parent().value( options[(System.currentTimeMillis() % options.size()) as int].value() )

希望它有效。

答案 1 :(得分:0)

不确定是否有'gebish'方法可以执行此操作,但您可以使用选择器获取值和标签

$('form select[name="dropdown"] option').each {
        println it.text() + ' :: ' + it.value()
}