2010-10-26 91 views
0

我從下拉列表中選擇任何項目時遇到任何問題。以下是我們網站的HTML。該HTML看起來像這樣Firewatir:Firewatir動態下拉問題

<div class="x-form-field-wrap x-trigger-wrap-focus" 
id="ext-gen157" style="width: 170px;"><input type="hidden" 
id="parentEntity" name="parentEntity" value=""><input type="text" 
id="cmbParentEntityId" autocomplete="off" size="24" class=" 
x-form-text x-form-field x-form-focus" style="width: 145px;"> 
<img class="x-form-trigger x-form-arrow-trigger" 
src="../ext/resources/images/default/s.gif" id="ext-gen158"></div> 

所以我創建了一個的Watir代碼如下所示:

@browser.text_field(:id,"cmbParentEntityId").set("1") 

其搜索開始1.一旦所有賬戶值設置爲1,下拉是示出僅佔從1開始下面是從降的HTML代碼向下

<div class="x-combo-list-inner" id="ext-gen336" style="width: 
248px; overflow: auto; height: 40px;"><div class="x-combo-list-item 
x-combo-selected">10_12_2010</div><div 
class="x-combo-list-item ">10_13_2010</div></div> 

基於我已經創建了的Watir代碼

上面的代碼
@browser.div(:class => "x-combo-list-inner", :text => "10_12_2010").click 

但沒有任何事情發生,我已經在網上搜索,但無法找到任何答案,我真的很感激,如果任何人都可以幫助我指向正確的方向。

謝謝

+0

我試圖使用XPath(ID(「EXT-gen336」)/ X:DIV [ 1]),但得到錯誤信息 – 2010-10-26 22:41:10

回答

1

你是什麼意思,什麼都沒有發生?如果我嘗試通過您所提供的代碼,然後我會得到預期的UnknownObjectException:

irb(main):003:0> b.div(:class => "x-combo-list-inner", :text => "10_12_2010").click 
Watir::Exception::UnknownObjectException: Unable to locate element, using {:class=>"x-combo-list-inner", :text=>"10_12_2010"} 
     from c:/Ruby/lib/ruby/gems/1.8/gems/watir-1.6.6/lib/watir/element.rb:57:in `assert_exists' 
     from c:/Ruby/lib/ruby/gems/1.8/gems/watir-1.6.6/lib/watir/element.rb:315:in `enabled?' 
     from c:/Ruby/lib/ruby/gems/1.8/gems/watir-1.6.6/lib/watir/element.rb:62:in `assert_enabled' 
     from c:/Ruby/lib/ruby/gems/1.8/gems/watir-1.6.6/lib/watir/element.rb:259:in `click!' 
     from c:/Ruby/lib/ruby/gems/1.8/gems/watir-1.6.6/lib/watir/element.rb:229:in `click' 
     from (irb):3 

那是因爲你想找到一類的「X-組合一覽內部」 div元素和「10_12_2010」的文字。沒有這樣的元素。看到這個:

irb(main):007:0> b.div(:class => "x-combo-list-inner").text 
=> "10_12_2010\r\n10_13_2010" 

「x-combo-list-inner」的文本包括每個子元素的文本。你可以尋找像這樣的特定的子元素:

irb(main):008:0> b.div(:class => "x-combo-list-inner").div(:text => "10_12_2010").html 
=> "\r\n<DIV class=\"x-combo-list-item &#13;&#10;x-combo-selected\">10_12_2010</DIV>" 

或用正則表達式:

irb(main):009:0> b.div(:class => "x-combo-list-inner", :text => /10_12_2010/).text 
=> "10_12_2010\r\n10_13_2010" 

而且,當涉及到點擊,那麼你必須知道確切的div你需要點擊 - 是第一個,還是第二個。另外,如果沒有任何反應,那麼你必須找出哪些JavaScript事件被綁定到正是這些元素,然後手動觸發事件:

irb(main):010:0> div = b.div(:class => "x-combo-list-inner").div(:text => "10_12_2010") 
=> #<Watir::Div:0x5846088 located=false how={:text=>"10_12_2010"} what=nil> 
irb(main):013:0> div.fire_event("onmousedown") 
=> nil 
irb(main):014:0> div.fire_event("onmouseup") 
=> nil 
+0

非常感謝您提供寶貴的幫助。一旦我想出了javaScript事件和正確的元素,我就能解決這個問題。 – 2010-10-27 21:59:34

+0

非常感謝您提供寶貴的幫助。一旦我想出了javaScript事件和正確的元素,我就能解決這個問題。 – 2010-10-27 21:59:35

1

我的猜測是應該明確地解僱一些JavaScript事件。見How to find out which JavaScript events fired?

+0

是的,它與JavaScript事件有關,您提供的鏈接相當有幫助。 – 2010-10-28 18:06:10

+0

隨時投票了我的答案然後。 :) – 2010-10-29 09:54:01