2011-05-10 14 views
8

Próbuję zlokalizować i kliknąć element menu jQuery, menu jest zdefiniowane jako wiele elementów UL zawierających pewną liczbę elementów LI.Lokalizowanie elementu LI za pomocą: tekstu za pomocą watir-webdriver

Używanie Firefoksa 3.6.17 na Macu 10.5, w standardowym WATIR, którego używałem;

browser.li(:text,"Options...").click 

lub

browser.div(:id,"Attributes-menu").li(:text,"Copy").click 

kliknąć na menu, ale przy użyciu Watir-webdriver (0.2.3) jest raportowania element LI nie można znaleźć. Chociaż mogę znaleźć zawierający DIV i instancję LI przy użyciu: class.

Załączam przykładowy kod menu poniżej, czy ktoś może zaproponować wiarygodną metodę lokalizacji elementu LI?

<div class="ws-menu-container ws-context-menu ws-context-menu-hidden" style="top: 16px; left: 214px; " id="Attributes-menu"> 
<ul class="ws-context-menu"><li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Copy&nbsp;&nbsp;&nbsp;</li></ul> 
<hr class="ws-context-menu-separator"> 
<ul class="ws-context-menu"> 
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Add...&nbsp;&nbsp;&nbsp;</li> 
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Remove...&nbsp;&nbsp;&nbsp;</li></ul> 
<hr class="ws-context-menu-separator"> 
<ul class="ws-context-menu"> 
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Clear Translation Flag&nbsp;&nbsp;&nbsp;</li> 
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Copy from Master Language...&nbsp;&nbsp;&nbsp;</li> 
<li class="ws-context-menu-disable">&nbsp;&nbsp;&nbsp;Push to Child Languages...&nbsp;&nbsp;&nbsp;</li></ul> 
<hr class="ws-context-menu-separator"> 
<ul class="ws-context-menu"> 
<li class="ws-context-menu">&nbsp;&nbsp;&nbsp;Options...&nbsp;&nbsp;&nbsp;</li></ul> 
<hr class="ws-context-menu-separator"> 
<ul class="ws-context-menu"> 
<li class="ws-context-menu">&nbsp;&nbsp;&nbsp;Refresh&nbsp;&nbsp;&nbsp;</li></ul> 
<hr class="ws-context-menu-separator"> 
<ul class="ws-context-menu"> 
<li class="ws-context-menu">&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</li></ul></div> 

Odpowiedz

19

Ten pracował dla mnie:

browser.div(:id => "Attributes-menu").li(:text => /Copy/).click 
+0

Works dla tekstu statycznego ale co użyciu zmiennej ciąg? –

+0

Jak już dyskutowaliśmy na Twitterze, zastąp '/ ​​Copy /' '/ # {nazwa_zmiennej} /'. :) –

+0

, aby uzyskać wyrażenie regularne wewnątrz zmiennej, utwórz nową instancję obiektu regex. Pozwól mi dodać odpowiedź –

3

Powodem nie znalazł jest nbsp; 's. Oprócz rozwiązania regexp Zeljko, powinniśmy być w stanie to zrobić poprzez dodanie Unicode bajty dla non-breaking space do łańcucha, którego szukasz, np

browser.li(:text => "\xc2\xa0\xc2\xa0\xc2\xa0Options...\xc2\xa0\xc2\xa0\xc2\xa0") 
1

zrobić rozwiązanie Zeljko, ale przy użyciu zmienna ciąg trzeba utworzyć nową instancję klasy wyrażenie regularne z ciągiem zmiennych

searchtext = Regexp.new(mystringvariable) 
browser.div(:id => "Attributes-menu").li(:text => searchtext).click 

uzyskać więcej informacji zobacz Rdoc for the Ruby Regexp class

Powiązane problemy