我正在尝试运行自动化测试,测试用例的其中一个步骤是清除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.
答案 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
。
希望这样可以正常使用!