通过Protractor在Ace Editor中插入文本会引发错误

时间:2017-12-20 06:27:19

标签: protractor ace-editor

我正在尝试运行自动化测试,测试用例的其中一个步骤是清除Ace编辑器并在其中插入文本。

之前我有定期内容可编辑的DIV,我可以在其中插入文本,但在切换到Ace Editor之后不再插入。

我正在做的就是打电话"清除"关于元素的方法然后" sendText"在上面。 我尝试添加"点击"清除之前的方法以确保Ace Editor确实具有焦点并且它确实将焦点带到了Ace Editor但它仍然会抛出一个错误,该元素应该是用户可编辑的以清除它。

为了防万一,我还试着在清理它之前进行5秒的睡眠,在Ace让div满足之前清除就会被触发。

确切地说,这是确切的错误。

Failed: invalid element state: Element must be user-editable in order to clear it.

3 个答案:

答案 0 :(得分:0)

棘手的问题。 由于Ace Editor不是本机浏览器元素,因此我查看它们提供的api。您似乎可以使用.selection.selectAll().removeLines()

如果我是你 - 我会尝试调用JS函数,它选择所有内容,然后调用.removeLines()

await browser.executeScript(`editor_reference.selection.selectAll(); editor_reference.removeLines()`) // variable will be diferent, depending how you connected editor object

http://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.executeScript

https://ace.c9.io/#nav=api&api=editor

你可以在他们的示例页面上看到它是如何工作的(https://ace.c9.io/) - 在浏览器控制台中执行它,编辑器应该被清除:

editor.selection.selectAll(); editor.removeLines()

答案 1 :(得分:0)

在mac上发送ctrl-a个密钥(cmd-a)以便在输入之前选择所有密钥,以便不需要清除

答案 2 :(得分:0)

之前我没有使用过Ace编辑器的经验。我使用了来自https://ace.c9.io/build/kitchen-sink.html的demo ace编辑器来查找您遇到的问题的解决方案。

我在演示版Ace编辑器中测试了下面的代码,它运行正常。不确定如何在您的应用程序中实现ace编辑器。您可以在您的应用程序中尝试它并提供您的想法。

browser.actions().mouseMove($(".ace_active-line")).click()
.sendKeys(protractor.Key.chord(protractor.Key.COMMAND, "a"))
.sendKeys(protractor.Key.BACK_SPACE)
.sendKeys("content in line1\ncontent in line2")
.perform()

如果您使用的是Windows机器,请使用protractor.Key.CONTROL代替protractor.Key.COMMAND

希望这样可以正常使用!