2015-06-22 147 views
2

在我的应用程序中,所有查询编辑器都是Ace编辑器,我需要使用WebDriver键入查询。我曾尝试使用发送密钥,但它似乎不工作。有没有其他方法可以将我的输入发送给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> 
+0

有人可以请建议如何使用webDriver实现sendKeys到AceEditor – Pringa

回答

3

它应该是更容易使用的编辑器API比的SendKeys。例如,这里是一个C#控制台应用程序,lauches 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');"); 
    } 
} 

editor是对应于ACE编辑器实例的页变量,我已经刚刚使用了这里详述的第一批API样品之一:Working with ACE

+0

感谢您的快速回复。可以请详细说明:(我对此是全新的......我使用的是使用java的WebDriver,所以对于我上面的代码,我怎样才能使用webDriver命令将我的查询(从* tableName中选择*)发送到ace编辑器。? – Pringa

+0

i dint理解你为什么导航到ace.c9.io网址,我们如何输入文本值到我们的应用程序Ace编辑器使用这个链接???你可以请给更多的输入。在此先感谢 – Pringa

+0

这只是一个示例如何自动化ace编辑器,该示例导航到ace页面并直接在该页面的ace编辑器中输入文本,演示如何使用webdriver自动化ace编辑器,而不使用sendkeys,但使用ace编辑器API。 –

1

我发现在ace的textarea上使用以下sequence可以正常工作。 mouseDown,mouseUp然后sendText

由于Ace的工作方式,点击不能可靠地工作,如果它应该关注textarea或不。

感谢您的提问,很高兴知道我并不孤单。希望这有帮助!

0

贝基和西蒙的答案都不适合我。 Simon尤其是因为我在页面上有多个ACE编辑器实例,并且ACE实例不会泄漏到窗口对象(现代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); 

这可以在PhantomJS 2中运行。如果ACE可以更容易地进行测试,那么它会很好,但是很好。