2011-01-12 29 views
7

Tôi đang đánh giá Watir-webdriver, để quyết định xem tôi có thể chuyển sang sử dụng nó cho các bài kiểm tra trình duyệt của tôi (từ Watir chủ yếu) hay không. Một trong những điều quan trọng là khả năng tương tác với các biên tập viên TinyMCE WYSIWYG. các ứng dụng tôi làm việc với TinyMCE. tôi đã quản lý để có được những giải pháp sau đây làm việc -Làm thế nào để xử lý tinyMCE khi tự động với watir-webdriver?

@browser = Watir::Browser.new(:firefox) 
@browser.goto("http://tinymce.moxiecode.com/tryit/full.php") 
autoit = WIN32OLE.new('AutoITX3.Control') 
autoit.WinActivate('TinyMCE - TinyMCE - Full featured example') 
@browser.frame(:index, 0).body.click 
autoit.Send("^a") # CTRL + a to select all 
autoit.Send("{DEL}") 
autoit.Send("Some new text") 

Hạn chế của phương pháp này, đó là bằng cách sử dụng AutoIt, tôi vẫn còn phụ thuộc vào Windows và khả năng chạy thử nghiệm nền tảng là một trong những điểm thu hút của webdriver.

tôi nhận thấy một số giải pháp webdriver cụ thể như sau từ this thread:

String tinyMCEFrame = "TextEntryFrameName" // Replace as necessary 
this.getDriver().switchTo().frame(tinyMCEFrame); 
String entryText = "Testing entry\r\n"; 
this.getDriver().findElement(By.id("tinymce")).sendKeys(entryText); 
//Replace ID as necessary 
this.getDriver().switchTo().window(this.getDriver().getWindowHandle()); 
try { 
    Thread.sleep(3000); 
} catch (InterruptedException e) { 

    e.printStackTrace(); 
} 

this.getDriver().findElement(By.partialLinkText("Done")).click(); 

Mà có vẻ như nó có thể làm việc cross-platform nhưng tôi không biết nếu các chức năng tương tự có thể được truy cập từ bên trong Watir- webdriver. Câu hỏi của tôi là, có một cách để viết, xóa và gửi vào TinyMCE bằng cách sử dụng watir-webdriver, mà sẽ không thực thi một sự phụ thuộc vào một trình duyệt được hỗ trợ cụ thể hoặc hệ điều hành?

+0

xem xét đăng câu hỏi này trong diễn đàn TinyMCE của moxiecode quá (điều này là rất cụ thể) – Thariama

Trả lời

5

Hiện tại, bạn cần phải tiếp cận và lấy phiên bản trình điều khiển cơ bản. Điều này phù hợp với tôi trên trang ví dụ về TinyMCE

b = Watir::Browser.new 
b.goto "http://tinymce.moxiecode.com/tryit/full.php" 

d = b.driver 
d.switch_to.frame "content_ifr" 
d.switch_to.active_element.send_keys "hello world" 

Điều này thực sự không được hiển thị tốt trong watir-webdriver, nhưng tôi sẽ khắc phục điều đó. Sau khi phiên bản tiếp theo (0.1.9), bạn sẽ có thể chỉ cần làm:

b.frame(:id => "content_ifr").send_keys "hello world" 
+0

Perfect. Đây chính là câu trả lời mà tôi nghĩ có thể là có thể nhưng thiếu/không thể tìm thấy kiến ​​thức để áp dụng. Tôi mong chờ bản phát hành tiếp theo. –

+0

Gần như hoàn hảo. Làm thế nào để xóa nội dung trước đó? MCE đã được phổ biến. Tiêu điểm là lúc đầu, do đó việc gửi "\ b" không làm gì cả. Tôi không thể gửi các ký tự/chuỗi điều khiển khác. Bây giờ tôi phải giải quyết bằng văn bản mới đang chờ xử lý ... –

+0

Wojciech: Công cụ này hoạt động trên máy Mac - .send_keys [: command, 'a'],: backspace, "hello world" - trên các nền tảng khác, bạn có thể muốn: kiểm soát thay vì: lệnh. – jarib

0

Mở nhiều phiên bản gần đây của TinyMCE (đáng chú ý là một hiện trên Moxiecode Full Các ví dụ được sử dụng trong ví dụ trên) có vẻ như bạn cần phải thêm một .click vào kịch bản để chọn vùng văn bản sau khi backspace, vì vậy bạn có thể cần phải sử dụng một cái gì đó như:

browser.frame(:id, "content_ifr").send_keys [:control, "a"], :backspace 
browser.frame(:id, "content_ifr").click 
browser.frame(:id, "content_ifr").send_keys("Hello World") 
2

tôi tìm thấy một cách tốt hơn để tự động biên tập TinyMCE là để gọi API JavaScript trực tiếp , theo cách đó bạn tránh sử dụng iFrames mà tôi thấy phiền hà.

Ví dụ:

require 'watir-webdriver' 
b = Watir::Browser.new 
b.goto 'http://tinymce.moxiecode.com/tryit/full.php' 
b.execute_script("tinyMCE.get('content').execCommand('mceSetContent',false, 'hello world');") 

Xem: http://watirwebdriver.com/wysiwyg-editors/

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