Grails 选择Geb中的随机下拉值

Grails 选择Geb中的随机下拉值,grails,automated-tests,geb,Grails,Automated Tests,Geb,我想在测试中选择一个随机的HTML选择选项,但是这些选项是动态生成的,在运行测试时它们的ID不一定是清晰的 我正在使用页面对象和内容DSL(实际上只是将表单定义为form{$(“form”)},因为我有其他问题),我知道我可以为form.dropdown控件指定特定的ID或文本值,但我不确定获取所有下拉值ID列表的最简单方法是什么(或者更好的是它们到名称的映射)用于此下拉列表 到目前为止,我只是尝试检查form.dropdown的类型,但是它被报告为ArrayList,并且包含空值,所以这不是很

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

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

到目前为止,我只是尝试检查
form.dropdown
的类型,但是它被报告为ArrayList,并且包含空值,所以这不是很有用

我已经阅读了Geb指南,但没有在我认为相关的部分找到一个好的解决方案:


FWIW我在Firefox WebRunner中使用Groovy/Grails。

不确定是否有“gebish”方法来实现这一点,但您可以使用选择器获取值和标签

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

我就是这样做的。有这个表格:

<form id="myform">
    <select name="dropdown">
        <option value="a">A</option>
        <option value="b">B</option>
        <option value="c">C</option>
    </select>
</form>
然后,通过以下方式生成随机索引:

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()
我们还可以从选项中引用SELECT,以避免不必要的CSS选择:

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

希望它能起作用。

您是否尝试过类似jQuery的选择器来选择下拉列表?还没有,我想可能有一个本机API来实现这一点。您可以使用jQuery进行选择。Geb使用类似的API
def options = $('#myform select[name="dropdown"] option')
options.parent().value( options[(System.currentTimeMillis() % options.size()) as int].value() )