如何在CodeMirror编辑器中使用selenium模拟关键事件

时间:2014-09-16 17:10:04

标签: javascript python selenium codemirror

周围有大量示例说明如何使用以下内容使用selenium

输入文本
driver.execute_script('cm.setValue("text")');

这有效,但不是我们的“硒”。我们想模拟实际的键盘按键,如selenium中的send_keys函数。我们创建了一个 enterFormData ,它使用driver.send_keys()获取元素和类型(例如,带有ID的textarea,我们可以轻松地模拟输入)。我们如何模拟CodeMirror编辑器中的实际按键?我们还希望能够测试HotKeys (例如Ctrl-Shift-M),然后选择 driver.get_screenshot_as_base64()

3 个答案:

答案 0 :(得分:1)

The codemirror instance should have a hidden textarea in it which captures the keyboard events...

I did something like this:

driver.findElement(By.css('.CodeMirror textarea'))
    .sendKeys('text', 
        webdriver.Key.chord(webdriver.Key.CONTROL, webdriver.Key.SHIFT, "m"));

This bit: webdriver.Key.chord(webdriver.Key.CONTROL, webdriver.Key.SHIFT, "m") simulates the (Ctrl+Shift+M)

答案 1 :(得分:0)

要让Selenium检测键盘事件,您首先必须将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");

答案 2 :(得分:0)

我自己已经找到问题https://stackoverflow.com/a/48969245/6077069的答案。您应该使用驱动程序的动作链而不是元素send_keys。就我而言,这是可行的。