Selenium webdriver 如何使用WebDriver自动化Ace编辑器(发送密钥)?

Selenium webdriver 如何使用WebDriver自动化Ace编辑器(发送密钥)?,selenium-webdriver,ui-automation,ace-editor,Selenium Webdriver,Ui Automation,Ace Editor,在我的应用程序中,所有查询编辑器都是Ace编辑器,我需要使用WebDriver键入查询。我试过使用发送键,但似乎不起作用。是否有其他方法可以将输入发送到Ace编辑器,从而实现自动化 下面是我的HTML代码 <div class="" ng-show="queryType=='Spark Query'"> <pre class=" ace_editor ace-xcode"> <textarea class="ace_text-input" wrap=

在我的应用程序中,所有查询编辑器都是Ace编辑器,我需要使用WebDriver键入查询。我试过使用发送键,但似乎不起作用。是否有其他方法可以将输入发送到Ace编辑器,从而实现自动化

下面是我的HTML代码

<div class="" ng-show="queryType=='Spark Query'">
    <pre class=" ace_editor ace-xcode">
    <textarea class="ace_text-input" wrap="off" autocorrect="off" autocapitalize="off" spellcheck="false" style="opacity: 0; height: 18px; width: 7px; left: 4px; top: 0px;"/>
    <div class="ace_gutter" style="display: none;">
    <div class="ace_scroller" style="left: 0px; right: 0px; bottom: 0px;">
    <div class="ace_content" style="margin-top: 0px; width: 659px; height: 334px; margin-left: 0px;">
    <div class="ace_layer ace_print-margin-layer">
    <div class="ace_layer ace_marker-layer"/>
    <div class="ace_layer ace_text-layer" style="padding: 0px 4px;">
    <div class="ace_layer ace_marker-layer"/>
    <div class="ace_layer ace_cursor-layer ace_hidden-cursors">
    </div>
</div>

使用编辑器API应该比使用SendKeys容易得多。例如,下面是一个C控制台应用程序,它启动ACE主页并更改当前演示编辑器中的文本:

class Program
{
    static void Main(string[] args)
    {
        ChromeDriver driver = new ChromeDriver();
        driver.Navigate().GoToUrl("http://ace.c9.io/");
        driver.ExecuteScript("editor.setValue('the new text here');");
    }
}

编辑器是页面中与ACE编辑器实例相对应的变量,我刚刚使用了此处详述的首批API示例之一:

我发现在ACE的textarea上使用以下序列工作可靠。mouseDown,mouseUp,然后sendText

Click对我来说并不可靠,因为Ace的工作方式决定了它是否应该关注文本区域


谢谢你的提问,很高兴知道我不是一个人。希望这是有帮助的

贝基和西蒙的答案对我都不适用。特别是Simon,因为我在页面上有多个ACE编辑器实例,并且ACE实例没有泄漏到window对象现代ES6模块封装中

以下是对我有效的ace 1.2.6:

const ta = document.querySelector("textarea");
ta.value = "my text\nwith newline";
ta.dispatchEvent(new Event("input"));
此外,如果您已注册密钥命令,则可以通过本机JS事件再次触发它们:

const e = document.createEvent("Event");
e.initEvent("keydown", true, true);
e.keyCode = 13  # Enter key
ta.dispatchEvent(e);

这在PhantomJS2中有效。如果ACE能够简化开箱即用的测试,那就太好了。

有人能建议如何使用WebDriver实现sendKeys to AceEditor谢谢您的快速响应。请详细说明一下:我对这个完全不熟悉。。我正在使用java的WebDriver。因此,对于我上面的代码,如何使用webDriver命令将查询Select*从表名发送到ace编辑器?我不明白您为什么要导航到ace.c9.io url,我们如何使用此链接将文本值输入到我们的应用程序ace编辑器???请你再多说几句好吗。提前感谢这只是一个如何自动化ace编辑器的示例。该示例导航到ace页面,并直接在该页面的ace编辑器中输入文本。它演示了如何使用webdriver自动化ace编辑器,而不使用sendkeys,而是使用ace编辑器API?当你指的是editor.setValue,editor是一个对象,我在哪里定义???所以在我将值发送给编辑器之前,我应该告诉webDriver这是编辑器。下面是我试过的代码。我需要导入罐子吗?driver.findElementBy.cssSelectordiv.ace_content.sendKeysselect*来自表;JavascriptExecutor驱动程序.executeScripteditor.setValue'select*fromTableName';;代码编辑器.setValue'thenewtext here';在浏览器中执行。在编辑器的页面上有一个全局变量“editor”。