在我的应用程序中,所有查询编辑器都是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 :(得分:3)
使用编辑器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');");
}
}
editor
是页面中与ACE编辑器实例对应的变量,我刚刚使用了此处详述的首批API示例之一:Working with ACE
答案 1 :(得分:2)
我发现在ace sequence
上使用以下textarea
可靠地工作。 mouseDown
,mouseUp
然后sendText
。
点击不能可靠地为我工作,因为如果它应该聚焦文本区域,Ace的工作方式。
感谢您的提问,很高兴知道我并不孤单。希望这有用!
答案 2 :(得分:1)
这对我有用(王牌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能够更容易地开箱测试,那就太好了,但是很好。