2013-11-20 73 views
0

我想在我的測試中選擇一個隨機的HTML選項,但是這些選項是動態生成的,並且在運行測試時它們的ID不一定是清晰的。在Geb中選擇隨機下拉值

我使用頁面對象和內容DSL(實際上只是定義形式form { $("form") }因爲我有問題,否則),我知道我可以分配一個特定的ID或文本價值的form.dropdown控制,但我不確定爲這個下拉列表獲取所有下拉值ID的列表(或者更好的是它們對名稱的映射),最簡單的方法是什麼?

我到目前爲止只嘗試檢查form.dropdown的類型,但它被報告爲ArrayList並且包含空值,所以這不是很有用。

我已經通過創業板引導閱讀,但沒能找到我相信是有關​​節一個很好的解決方案:

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

FWIW我使用Groovy/Grails的使用Firefox WebRunner。

+0

你有沒有嘗試jQuery像選擇器選擇下拉菜單? – havenchyk

+0

還沒有,我認爲可能有一個本地API來做到這一點。 –

+0

您可以使用jquery進行選擇。 Geb使用類似的API – havenchyk

回答

0

不知道如果有一個「gebish」的方式做到這一點,但你可以使用選擇

$('form select[name="dropdown"] option').each { 
     println it.text() + ' :: ' + it.value() 
} 
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() 

我們還可以引用從選項,避免了不必要的CSS選擇:

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

希望工程。