2011-05-10 76 views
8

我想查找並單擊一個jQuery菜單元素,該菜單被定義爲包含多個LI元素的多個UL元素。使用以下命令查找LI元素:使用watir-webdriver的文本

在Mac 10.5上使用Firefox 3.6.17,在標準WATIR中使用;

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

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

對菜單項,但使用的Watir-的webdriver(0.2.3),它是報告LI元素點擊無法找到。雖然我可以通過使用:class找到包含DIV和LI的實例。

我附上了一個菜單HTML的例子,任何人都可以提出一個可靠的方法來定位李項目?

<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> 

回答

19

這爲我工作:

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

工程靜態文本,但是怎麼樣使用字符串變量? – 2011-05-10 11:50:16

+0

正如我們在Twitter上所討論的那樣,用'/#{variable_name} /'替換'/ Copy /'。 :) – 2011-05-10 12:55:21

+0

在變量內部得到一個正則表達式創建一個正則表達式opbject的新實例。呃讓我添加一個答案 – 2011-05-11 18:46:01

3

它沒有找到的原因是NBSP;的。除了澤利科的正則表達式的解決方案,你應該能夠通過增加對非打破空間字符串你要找的,比如Unicode的字節來做到這一點:

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

要做到澤利科的解決方案,但使用字符串變量,你需要從字符串變量

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

更多信息創建正則表達式類的新實例看到Rdoc for the Ruby Regexp class