我正在使用量角器 - 黄瓜框架为Monaco编辑器编写BDD测试。不久之前,我发现了Monaco API以及如何以编程方式在编辑器中设置值。但这次, 我无法使用量角器获取monaco编辑器中的文本。这是我的代码示例:
browser.ignoreSynchronization = true;
let driver = browser.driver;
// iframe ids
let iframeID = 'editorFrame';
let editorSpanXpath = '//div[@id="editorContainer"]//div[contains(@class, "monaco- editor")]//div[contains(@class, "editor-scrollable")]'
// switching to the iFrame to perform tasks inside it
browser.switchTo().frame(iframeID);
// clicking on a div inside the editor to ascertain that
// the browser knows where to run the script
driver.findElement(by.xpath(editorSpanXPath)).click();
browser.executeScript('this.monaco.editor.getModels()[0].getValue()').then(function(editorText){
let replaceString = 'abracadbra' + editorText
browser.executeScript('this.monaco.editor.getModels()[0].setValue("' + replaceString + '")');
}
);
这里的问题是' editorText'不断上升。在运行我的BDD测试时,编辑器中的值将替换为' abracadabranull'
使用一些默认文本初始化编辑器。而且因为'setValue'功能正常,我认为浏览器驱动程序在获取编辑器加载的iFrame时没有任何问题。
任何帮助都将不胜感激。
答案 0 :(得分:0)
最后,这是一个简单的退货声明,挽救了这一天:
browser.ignoreSynchronization = true;
let driver = browser.driver;
// iframe ids
let iframeID = 'editorFrame';
let editorSpanXpath = '//div[@id="editorContainer"]//div[contains(@class, "monaco- editor")]//div[contains(@class, "editor-scrollable")]'
// switching to the iFrame to perform tasks inside it
browser.switchTo().frame(iframeID);
// clicking on a div inside the editor to ascertain that
// the browser knows where to run the script
driver.findElement(by.xpath(editorSpanXPath)).click();
browser.executeScript('return this.monaco.editor.getModels()[0].getValue()').then(function(editorText){
let replaceString = 'abracadbra' + editorText
browser.executeScript(' return this.monaco.editor.getModels()[0].setValue("' + replaceString + '")');
}
);
非常感谢this回答指出我正确的方向。