我的页面上有一个富文本编辑器,需要输入一些文本。我写了一个解决方案,但它似乎只能间歇性地工作。这是我已经尝试过的:
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(); ,我会永久收到错误“元素必须是用户可编辑的才能清除它”。我可以输入(不时),但不能清除(永久)。 那么,问题是如何稳定这段代码呢?
答案 0 :(得分:0)
好的,我找到了解决方案。它通过DOM工作。 currentInstance获得专注的文本区域,这就是为什么我首先点击方法。
editor.Click();
IJavaScriptExecutor js = (IJavaScriptExecutor) _driver;
js.ExecuteScript("CKEDITOR.currentInstance.insertText('text')")