1

ページにリッチテキストエディタがあり、そこにテキストを入力する必要がありました。私は解決策を書きましたが、それは断続的にしか機能しないようです。これが私がすでに試したことです:

        var iframe = _driver.SwitchTo().Frame(Driver.FindElement(By.XPath(xpath)));
        var editor = iframe.FindElement(By.XPath("//*"));
        for (var i = 1; _driver.FindElement(By.XPath("//*")).Text == String.Empty; i++)
        {
            switch (i)
            {
                case 1:
                    editor.SendKeys(text);
                    break;
                case 2:
                    editor.SendKeys(Keys.Control + "a");
                    editor.SendKeys(Keys.Delete);
                    editor.SendKeys(text);
                    break;
                case 3:
                    editor.Click();
                    editor.SendKeys(text);
                    break;
                case 4:
                    throw new Exception("Rich Text Editor can't be reached");
            }
            editor.SendKeys(text);

ループでは、テキストが入力されているかどうかを確認します。そうでない場合は、別のケースを試してみます。さらに、editor.Clear();を実行しようとすると 「要素をクリアするには、要素をユーザーが編集できる必要があります」というエラーが永続的に発生します。(時々)タイプすることはできますが、(永久に)クリアすることはできません。それで、問題はこのコードをどのように安定させるかです。

4

1 に答える 1

0

わかりました、私は解決策を見つけました。DOM を介して動作します。currentInstance はフォーカスされたテキスト領域を取得します。そのため、最初にクリックメソッドを使用しています。

editor.Click();
IJavaScriptExecutor js = (IJavaScriptExecutor) _driver;
js.ExecuteScript("CKEDITOR.currentInstance.insertText('text')")
于 2012-09-21T13:51:44.110 に答える