【问题标题】:IFrame in webdriver. Typing in RTE网络驱动程序中的 IFrame。输入 RTE
【发布时间】:2012-09-20 07:45:20
【问题描述】:

我的页面上有一个富文本编辑器,需要在其中输入一些文本。我写了一个解决方案,但它似乎只能间歇性地工作。这是我已经尝试过的:

        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();,我会永久收到错误消息“元素必须是用户可编辑的才能清除它。”我可以(不时)输入,但不能(永久)清除。 那么问题来了,如何稳定这段代码呢?

【问题讨论】:

  • 随机抛出什么类型的异常?在进行任何操作之前,请确保该元素在 DOM 中可用。您可以在富文本编辑器中手动清除内容吗?
  • 只是默默不打字,没有异常。表单是完全手动交互的。

标签: c# iframe selenium webdriver rich-text-editor


【解决方案1】:

好的,我找到了解决方案。它通过 DOM 工作。 currentInstance 获得焦点文本区域,这就是为什么我首先使用 click 方法。

editor.Click();
IJavaScriptExecutor js = (IJavaScriptExecutor) _driver;
js.ExecuteScript("CKEDITOR.currentInstance.insertText('text')")

【讨论】:

  • 还有 window.frames[0] 但不知何故对我不起作用。
猜你喜欢
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多