2011-05-30 54 views

回答

0

嘗試這樣: tester.executeAjaxEvent("form:myRadioButtonId", "onchange");

+1

良好的直覺,但不幸的是,這不會工作,因爲AjaxFormChoiceComponentUpdatingBehavior不是一個AjaxEventBehavior。 – 2012-03-06 20:02:53

0

這至少在Wicket 1.4中(我沒有用1.5試過),結果有些痛苦。

通過網絡搜索,我在Mischa Dasberg's blog中發現提示。基本上,您不能使用BaseWicketTester.executeAjaxEvent((String componentPath, String event)方法,因爲您使用的行爲不是,並且您不能使用BaseWicketTester.executeBehavior(final AbstractAjaxBehavior behavior),因爲它會消除請求參數。

Mischa的解決方案是在父測試用例中實現他自己的executeBehavior方法,該方法適用於他的情況,但不適合我的需要,因爲它假定請求參數id與完整組件路徑相同。

我已經做了通過在WicketTester擴展實現我自己的executeAjaxBehavior,但假設(如在我的情況是真實的),該請求參數是最後一個類似的東西「:」分隔的組件路徑的部分:

public void executeAjaxBehavior(String path, String value) { 
    AbstractAjaxBehavior behavior = (AbstractAjaxBehavior) getComponentFromLastRenderedPage(path).getBehaviors().get(0); 
    CharSequence url = behavior.getCallbackUrl(false); 
    WebRequestCycle cycle = setupRequestAndResponse(true); 
    getServletRequest().setRequestToRedirectString(url.toString()); 
    String[] ids = path.split(":"); 
    String id = ids[ids.length-1]; 
    getServletRequest().setParameter(id, value); 
    processRequestCycle(cycle); 
} 

他的解決方案和我的(基於他)都假設行爲是組件上的第一個(或唯一)行爲。

這有點笨拙,但類似的東西可能適合你。

如果ID和行爲是分開獲得並作爲參數傳遞的,當然你可能會發現第一個行爲實際上是一個AjaxFormChoiceComponentUpdatingBehavior,而不是輕率地認爲它是第一個行爲,但這樣做可能會更好是一個開始。

這也類似於BaseWicketTester類中其他行爲測試方法的代碼,這可能值得一看。

4

解決方案檢票1.5.x的:

AbstractAjaxBehavior behavior = (AbstractAjaxBehavior)WicketTesterHelper. 
      findBehavior(getTester().getComponentFromLastRenderedPage("path:to:component"), 
         AjaxFormChoiceComponentUpdatingBehavior.class); 
getTester().executeBehavior(behavior); 
+0

在Wicket 6中成功嘗試了這一點 – Sonata 2016-06-14 16:45:21

2

首先選擇你想要的單選按鈕。

form.select("path to radio button", 0/1) 

然後執行AJAX行爲:

tester.executeBehavior((AbstractAjaxBehavior)tester.getComponentFromLastRenderedPage("path to radio buttons").getBehaviors().get(0)); 
1

這裏是我的一段代碼,這完全適用於我的選擇框,但應該菲亞特以及爲單選按鈕,如果你改變行爲類。所需的步驟是:

  • 插入新值的形式(使用FormTester)
  • 找到的行爲
  • 上改變

這裏執行行爲的代碼示例:

//simulate insert new value 
FormTester formTester = tester.newFormTester(PANEL_ID + FORM); 
formTester.setValue("selectBox", "newValue"); 
//Find onchange behaviour 
AjaxFormComponentUpdatingBehavior behavior = 
     (AjaxFormComponentUpdatingBehavior) WicketTesterHelper.findBehavior(
     tester.getComponentFromLastRenderedPage(PANEL_ID + FORM + ":" + "selectBox"), 
     ajaxFormComponentUpdatingBehavior.class); 
//execute onchange 
tester.executeBehavior(behavior); 

我錯過了標準桿如何在以前的答案中更新表單值。

相關問題