以编程方式编辑CodeMirror内容而无需访问对象

时间:2014-02-18 04:44:16

标签: javascript selenium selenium-webdriver codemirror

我正在使用Selenium在包含CodeMirror编辑器的页面上运行自动化测试。我没有访问该对象,但我确实有jQuery可用。如何以CodeMirror识别更改的方式编辑编辑器的内容?

5 个答案:

答案 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检测键盘事件,首先必须使代码镜像成为焦点。