2011-01-12 61 views
7

我正在評估Watir-webdriver,以決定是否可以切換到使用它進行我的瀏覽器測試(主要來自Watir),關鍵的事情之一是能夠與TinyMCE所見即所得的編輯器進行交互,我使用的應用程序使用TinyMCE。 我已經成功地得到了以下解決方案的工作 -如何使用watir-webdriver進行自動化時處理tinyMCE?

@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") 

這種方法的缺點是,通過使用AutoIt的,我仍然依賴於Windows和運行測試,跨平臺的能力的景點之一的webdriver。

我注意到一些webdriver的具體解決方案,如從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(); 

這看起來似乎是跨平臺工作,但我不知道是否相同的功能可以從內部Watir-訪問的webdriver。我的問題是,有沒有辦法使用watir-webdriver寫入,刪除並提交到TinyMCE中,而不會強制依賴於特定的受支持的瀏覽器或操作系統?

+0

考慮moxiecode過的TinyMCE的論壇上發帖這個問題(這是非常具體) – Thariama 2011-01-12 07:50:27

回答

5

目前,您需要訪問並獲取底層驅動程序實例。這對我的作品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" 

這實際上是沒有的Watir-很好的webdriver上暴露,但我會解決這個問題。下一個版本(0.1.9),你應該能夠經過簡單地做:

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

完美。這正是我認爲可能的答案,但缺乏/無法找到適用的知識。我期待下一個版本。 – 2011-01-13 22:40:58

0

在更近的TinyMCE版本(特別是一個目前在上面的例子中使用的Moxiecode全功能的例子),似乎你需要一個。點擊添加到腳本選擇退格後的文本區域,所以你可能需要使用類似:

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

我發現自動TinyMCE的編輯一個更好的方式是直接調用JavaScript API ,這樣你就避免了使用我覺得麻煩的iFrames。

例如:

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');") 

參見:http://watirwebdriver.com/wysiwyg-editors/