7

私はWatir-webdriverを評価して、ブラウザーテスト(主にWatirから)に使用するように切り替えることができるかどうかを判断しています。重要なことの1つは、TinyMCEWYSIWYGエディターと対話する機能です。 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に依存し続け、クロスプラットフォームでテストを実行できることがWebドライバーの魅力の1つであるということです。

このスレッドから、次のようなWebドライバー固有のソリューションに気づきました。

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に書き込み、削除、送信する方法はありますか?これは、サポートされている特定のブラウザーまたはオペレーティングシステムへの依存を強制しませんか?

4

3 に答える 3

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"
于 2011-01-13T10:58:37.680 に答える
2

TinyMCE エディターを自動化するより良い方法は、JavaScript API を直接呼び出すことです。そうすれば、面倒な iFrame を使用する必要がなくなります。

例えば:

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/

于 2011-09-18T12:08:42.323 に答える
0

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")
于 2011-06-14T20:54:21.897 に答える