Как работать с tinyMCE при автоматизации с помощью watir-webdriver? - PullRequest
7 голосов
/ 12 января 2011

Я оцениваю Watir-webdriver, чтобы решить, смогу ли я перейти на использование его для своих тестов браузера (в основном от Watir), и одной из ключевых вещей будет возможность взаимодействия с редакторами TinyMCE WYSIWYG, так какприложения, с которыми я работаю, используют 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, и возможность запуска кросс-платформенных тестов является одной изДостопримечательности вебдрайвера.

Я заметил некоторые специфические для вебдрайвера решения, такие как следующее из этой темы :

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.У меня вопрос, есть ли способ записи, удаления и отправки в TinyMCE с помощью watir-webdriver, который не обеспечит зависимость от конкретного поддерживаемого браузера или операционной системы?

Ответы [ 3 ]

5 голосов
/ 13 января 2011

В данный момент вам нужно получить доступ и получить экземпляр базового драйвера.Это работает для меня на странице примера 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"
2 голосов
/ 18 сентября 2011

Я считаю, что лучший способ автоматизации редакторов TinyMCE - напрямую вызывать API-интерфейс JavaScript, чтобы избежать использования 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/

0 голосов
/ 15 июня 2011

В более поздних версиях TinyMCE (в частности, той, которая в настоящее время используется в полнофункциональном примере Moxiecode, использованном в приведенном выше примере), кажется, что вам нужно добавить .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")
...