我正在使用Selenium在包含CodeMirror编辑器的页面上运行自动化测试。我没有访问该对象,但我确实有jQuery可用。如何以CodeMirror识别更改的方式编辑编辑器的内容?
答案 0 :(得分:11)
包装div
DOM元素(具有类CodeMirror
)将具有引用编辑器实例对象的属性CodeMirror
。你可以打电话给setValue
。
答案 1 :(得分:8)
由于所选答案帮助了我,所以在此发布此信息,但我缺少一些信息来完全解决我的问题(主要是由于我不了解JavaScript或如何与WebElement属性进行交互)。这就是Selenium / Java代码的样子:
WebDriver driver = new FirefoxDriver();
WebElement queryInput = driver.findElement(By.cssSelector("div[class='CodeMirror']"));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].CodeMirror.setValue(\"" + query + "\");", queryInput);
答案 2 :(得分:1)
@ user3233451 - 就我而言,我必须引用正确的web元素,例如: By.cssSelector(" .CodeMirror")。
另外,我在页面上有两个CodeMirror Web元素,因此我做了以下内容:
//declare codemirror variable
private By codeMirrorWebElement = By.cssselector(".CodeMirror");
//use Javascript executor to access each code mirror element via its respective index
((JavascriptExecutor) driver).executeScript("arguments[0].CodeMirror.setValue( '"+ query1 + "');", driver.findElements(codeMirrorWebElement).get(0));
((JavascriptExecutor) driver).executeScript("arguments[0].CodeMirror.setValue( '"+ query1 + "');", driver.findElements(codeMirrorWebElement).get(1));
答案 3 :(得分:1)
这对我不起作用...
driver.findElement(By.cssSelector("div[class='CodeMirror']"))
但这确实...
driver.findElement(By.className('CodeMirror'))
所以,我的代码最终显示为:
WebElement codeMirror driver.findElement(By.cssSelector("div[class='CodeMirror']"))
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].CodeMirror.setValue(\"" + sqlValue + "\");", codeMirror);
答案 4 :(得分:1)
其他人发布的答案是正确的,但是如果要发送键盘事件而不是替换Codemirror的值,则可以执行以下操作:
/* getting codemirror element */
WebElement codeMirror = driver.findElement(By.className("CodeMirror"));
/* getting the first line of code inside codemirror and clicking it to bring it in focus */
WebElement codeLine = codeMirror.findElements(By.className("CodeMirror-line")).get(0);
codeLine.click();
/* sending keystokes to textarea once codemirror is in focus */
WebElement txtbx = codeMirror.findElement(By.cssSelector("textarea"));
txtbx.sendKeys("Hello World");
要让Selenium检测键盘事件,首先必须使代码镜像成为焦点。