Firewatir: Firewatir Dynamic suspenso problema
Pergunta
Estou tendo algum problema em selecionar qualquer item do suspenso. Abaixo está o HTML do nosso site. O HTML se parece com isso
<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>
Então, eu criei um código watir que se parece com o seguinte:
@browser.text_field(:id,"cmbParentEntityId").set("1")
que procuram todas as contas que começam com 1.Ceo o valor é definido como 1, o suspenso está mostrando apenas contas começando com 1. abaixo está o código HTML do suspensão
<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>
Com base no código acima, criei o código watir
@browser.div(:class => "x-combo-list-inner", :text => "10_12_2010").click
Mas nada está acontecendo, pesquisei na web, mas não consegui encontrar respostas, eu realmente aprecio que se alguém puder me ajudar a apontar para a direção certa.
Obrigado
Solução
O que você quer dizer com que nada está acontecendo? Se eu tentar o código fornecido por você, receberei uma UNHNALHOWNOWNOBJETEXCECTIÇÃO:
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
Isso é porque você está tentando encontrar um elemento div com uma classe de "X-Combo-List Inner" e um texto de "10_12_2010". Não existe um elemento. Veja isso:
irb(main):007:0> b.div(:class => "x-combo-list-inner").text
=> "10_12_2010\r\n10_13_2010"
O texto de "X-Combo-List Inner" inclui textos para cada elemento infantil. Você pode procurar esse elemento filho em particular como este:
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 x-combo-selected\">10_12_2010</DIV>"
Ou com regexps:
irb(main):009:0> b.div(:class => "x-combo-list-inner", :text => /10_12_2010/).text
=> "10_12_2010\r\n10_13_2010"
E quando se trata de clicar, você precisa saber qual div é exato que você precisa clicar - é o primeiro ou o segundo. Além disso, se nada acontecer, você precisa descobrir quais eventos JavaScript são BIMIND para esses elementos exatamente e depois disparam eventos manualmente:
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
Outras dicas
Meu palpite é que algum evento JavaScript deve ser demitido explicitamente. Ver Como descobrir quais eventos JavaScript demitidos?