2015-06-22 144 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可以更容易地進行測試,那麼它會很好,但是很好。