2011-05-10 33 views
8

Tôi đang cố xác định vị trí và nhấp vào phần tử trình đơn jQuery, menu được định nghĩa là nhiều phần tử UL chứa một số phần tử LI.Định vị phần tử LI sử dụng: văn bản sử dụng watir-webdriver

Sử dụng Firefox 3.6.17 trên máy Mac 10.5, theo tiêu chuẩn WATIR tôi đã sử dụng;

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

hoặc

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

bấm vào các mục trình đơn nhưng sử dụng watir-webdriver (0.2.3) nó được báo cáo là yếu tố LI không thể được tìm thấy. Mặc dù tôi có thể tìm thấy DIV có chứa và một thể hiện của LI bằng cách sử dụng: class.

Tôi đã đính kèm một ví dụ về HTML menu bên dưới, bất kỳ ai cũng có thể đề xuất phương pháp xác định vị trí mục tin cậy 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> 

Trả lời

19

này đã làm việc cho tôi:

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

trình cho văn bản tĩnh nhưng những gì về việc sử dụng một biến chuỗi? –

+0

Như chúng ta đã thảo luận trên Twitter, thay thế '/ Copy /' bằng '/ # {variable_name} /'. :) –

+0

để có được một regex bên trong một biến tạo ra một thể hiện mới của một opex. Meh cho tôi thêm câu trả lời –

3

Lý do nó không tìm thấy là nbsp; 's. Ngoài giải pháp regexp Željko, bạn sẽ có thể làm điều này bằng cách thêm Unicode byte cho một không gian không bị phá hủy vào chuỗi bạn đang tìm kiếm, ví dụ:

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

Để làm giải pháp Zeljko nhưng sử dụng một chuỗi biến bạn cần phải tạo một đối tượng mới của lớp biểu thức chính quy từ chuỗi của bạn biến

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

để biết thêm thấy Rdoc for the Ruby Regexp class

Các vấn đề liên quan