Как обращаться с tinyMCE при автоматизации с помощью watir-webdriver?

Я оцениваю 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, и возможность запуска тестов кросс-платформенной является одной из привлекательных возможностей webdriver.

Я заметил некоторые специальные решения для webdriver, такие как этот поток:

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 ответа

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


Я нахожу лучший способ автоматизации редакторов 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/


В более поздних версиях TinyMCE (в частности, в настоящее время на примере Moxiecode Full Featured, используемом в примере выше) кажется, вам нужно добавить .click в script, чтобы выбрать текстовую область после обратного пространства, поэтому вам может понадобиться использовать что-то вроде:

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

licensed under cc by-sa 3.0 with attribution.