简体   繁体   English

如何编写针对ui-codemirror AngularJS指令的Protractor测试?

[英]How to write Protractor test for ui-codemirror AngularJS directive?

I am using the ui-codemirror AngularJS directive in a project and would like to write a Protractor test (devopshammer/src/test/webapp/e2e/json-spec.js) which adds some input to it. 我使用的UI-codemirror AngularJS指令的项目 ,并想编写一个量角器测试(devopshammer / src目录/测试/ web应用/ E2E / JSON-spec.js),它增加了一些输入到它。

Finding the element by it's model (ng-model attribute) returns the ui-codemirror element, but it is not possible to use sendKeys() method to add some input (neither on it's child element). 通过其模型(ng-model属性)查找该元素将返回ui-codemirror元素,但是无法使用sendKeys()方法添加一些输入(都不在其子元素上)。

Does anyone have a hint how to do that? 有没有人提示如何做?

Stacktrace: 堆栈跟踪:

 Failures: 1) json formatter shuld say error message when invalid input Message: UnknownError: unknown error: cannot focus element (Session info: chrome=43.0.2357.81) (Driver info: chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Windows NT 6.1 SP1 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 24 milliseconds Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50' System info: host: 'HCE-F9HBD12', ip: '3.183.12.101', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_45' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\\Users\\212412~1\\AppData\\Local\\Temp\\scoped_dir7296_19054}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=43.0.2357.81, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true} Session ID: fffb7bec66f225f772bd998c9bc9c364 Stacktrace: UnknownError: unknown error: cannot focus element (Session info: chrome=43.0.2357.81) (Driver info: chromedriver=2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),platform=Windows NT 6.1 SP1 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 24 milliseconds Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50' System info: host: 'HCE-F9HBD12', ip: '3.183.12.101', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_45' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\\Users\\212412~1\\AppData\\Local\\Temp\\scoped_dir7296_19054}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=43.0.2357.81, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true} Session ID: fffb7bec66f225f772bd998c9bc9c364 at new bot.Error (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\atoms\\error.js:113:18) at Object.bot.response.checkResponse (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\atoms\\response.js:106:9) at C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\webdriver.js:377:20 at [object Object].promise.ControlFlow.runInFrame_ (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:1877:20) at [object Object].promise.Callback_.goog.defineClass.notify (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:2464:25) at [object Object].promise.Promise.notify_ (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:563:12) at Array.forEach (native) at Object.goog.array.forEach (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\goog\\array\\array.js:203:43) at [object Object].promise.Promise.notifyAll_ (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:552:16) at goog.async.run.processWorkQueue (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\goog\\async\\run.js:125:21) Error at [object Object].ElementArrayFinder.applyAction_ (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\lib\\element.js:408:21) at [object Object].self.(anonymous function) [as sendKeys] (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\lib\\element.js:76:19) at [object Object].self.(anonymous function) [as sendKeys] (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\lib\\element.js:736:11) at [object Object].<anonymous> (c:\\projects\\devopshammer-master\\src\\test\\webapp\\e2e\\json-spec.js:25:40) at C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\jasminewd\\index.js:94:14 at [object Object].promise.ControlFlow.runInFrame_ (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:1877:20) at [object Object].promise.ControlFlow.runEventLoop_ (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:1755:8) at [object Object].<anonymous> (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\webdriver\\promise.js:2056:12) at goog.async.run.processWorkQueue (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\selenium-webdriver\\lib\\goog\\async\\run.js:125:21) From: Task: Asynchronous test function: it() at [object Object].<anonymous> (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\jasminewd\\index.js:93:33) at [object Object].<anonymous> (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\async-callback.js:45:37) at [object Object].jasmine.Block.execute (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:1174:17) at [object Object].jasmine.Queue.next_ (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:2209:31) at [object Object]._onTimeout (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:2199:18) Error at [object Object].<anonymous> (c:\\projects\\devopshammer-master\\src\\test\\webapp\\e2e\\json-spec.js:22:5) at [object Object].jasmine.Env.describe_ (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:913:21) at [object Object].jasmine.Env.describe (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:898:15) at describe (C:\\Users\\212412346\\AppData\\Roaming\\npm\\node_modules\\protractor\\node_modules\\minijasminenode\\lib\\jasmine-1.3.1.js:658:27) at Object.<anonymous> (c:\\projects\\devopshammer-master\\src\\test\\webapp\\e2e\\json-spec.js:1:63) 

Template code: 模板代码:

 <div ng-show="hasInvalidContent()" class="alert alert-danger" role="alert">INVALID {{message}}</div> <div> <p> <ui-codemirror class="text-left" ui-codemirror-opts="editorOptions" ng-model="jsonInput"></ui-codemirror> </p> <p> <input id="formatJsonButtonId" type="button" class="btn btn-primary" ng-click="jsonInputChange()" value="Format"/> </p> </div> 

Test code: 测试代码:

 it('shuld say error message when invalid input', function () { var messageError = element(by.css('div.alert-danger')); element(by.model('jsonInput')).sendKeys('{'); element(by.id('formatJsonButtonId')).click(); expect(messageError.isDisplayed()).toBeTruthy(); }); 

Click here for GitHub repository. 单击此处获取GitHub存储库。

您可以解决:

   browser.executeScript("var editor = $('.CodeMirror')[0].CodeMirror;editor.setValue('{');");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM