2011-01-12 2 views
7

Watir-webdriver를 평가하여 (Watir의 브라우저 테스트를 위해) 브라우저 테스트 용으로 전환 할 수 있는지 결정할 필요가 있습니다. 핵심 작업 중 하나는 TinyMCE WYSIWYG 편집기와 상호 작용할 수있는 기능입니다. 응용 프로그램 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 및 테스트 크로스 플랫폼을 실행할 수있는 능력에 따라 남아 있다는 것입니다을 관광 명소 중 하나입니다 of webdriver.

나는 같은 this thread에서 다음과 같은 몇 가지 webdriver 특정 솔루션을 발견 : 그것은 크로스 플랫폼을 작동 할 수 있지만 같은 기능이 Watir- 내에서 액세스 할 수 있는지 모르겠어요처럼 보인다

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(); 

webdriver. 제 질문은 특정 지원되는 브라우저 또는 운영 체제에 대한 종속성을 적용하지 않을 watir-webdriver를 사용하여 TinyMCE에 쓰고 삭제하고 제출하는 방법이 있습니까?

+0

너무 moxiecode의 TinyMCE에 포럼에이 질문을 게시 고려 (이 매우 다릅니다) – Thariama

답변

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)를 사용하면 수있을 것입니다 후 간단하게 할 수 있습니다 : TinyMCE에의 최신 버전 (현재 위의 예에서 사용 된 Moxiecode 완전한 기능을 갖춘 예에 특히 하나)에

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

적합합니다. 이것은 내가 생각 했었지만 가능하지 않았던 지식/대답을 찾을 수 없었던 대답이었습니다. 나는 다음 릴리스를 기대합니다. –

+0

거의 완벽합니다. 이전 콘텐츠를 지우는 방법? MCE는 이미 채워져 있습니다. 포커스가 처음이므로 "\ b"를 보내는 것은 아무 것도하지 않습니다. 다른 제어 문자/시퀀스를 보내지 못했습니다. 지금은 새로운 텍스트를 앞두고 정착해야만합니다 ... –

+0

Wojciech : 내 Mac에서는 .send_keys [: command, 'a'], : backspace, "hello world"- 다른 플랫폼에서는 다음과 같이 할 수 있습니다 : control 대신 : 명령. – jarib

0

당신을 보인다 백 스페이스 후 텍스트 영역을 선택하는 스크립트에 .click를 추가해야합니다, 그래서 당신은 같은 것을 사용할 필요가 있습니다

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에 편집기를 자동화하는 더 나은 방법을 찾으 직접 자바 스크립트 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/

관련 문제