使用casperjs

时间:2016-07-12 10:09:31

标签: javascript phantomjs casperjs

如何使用casperjs模拟键盘操作/事件?我在按下shift + alt + enterctrl + }ctrl + shift + >之类的键盘操作时遇到困难,还有更多像这样的事情。 有人可以帮助我做这些行动

尝试使用以下

this.sendKeys('div.edit-code > textarea:nth-child(1)', 'enter', {modifiers: 'shift + alt'});

编辑:

我需要使用this site的键盘快捷键执行单元格,方案如下:

  • 使用'+'符号
  • 创建新单元格
  • 向单元格添加一些内容
  • 现在使用键盘快捷键,需要执行(例如:"shift+alt+enter"单元格

1 个答案:

答案 0 :(得分:1)

我写了一个小测试用例:

keyboard.html (抓住键盘事件并将其写入div):

<script>
    document.onkeypress = function (e) {
        var keys = [e.ctrlKey ? "CTRL" : "", e.altKey ? "ALT" : "", e.shiftKey ? "SHIFT" : "", String.fromCharCode(e.keyCode)].filter(function (x) {
            return x != "";
        })
        document.querySelector('#text').textContent = keys.join(" + ");
    };
</script>
<div id="text">

</div>

Casper脚本

var casper = require('casper').create();

casper.start('http://localhost:63344/CasperSheet/keyboard.html');

function testKey(key, modifiers) {
    casper.then(function () {
        casper.sendKeys("#text", key, {modifiers: modifiers});
    }).then(function () {
        casper.echo(casper.evaluate(function () {
            return document.querySelector("#text").textContent
        }))
    })
}

testKey('a');
testKey('}', 'ctrl')
testKey('>', 'ctrl+alt')
testKey('\n', 'shift+alt')
casper.run();

<强>输出

a
CTRL + }
CTRL + ALT + >
ALT + SHIFT + 
//a new line here...

来看看你的代码,我的建议:

  1. 'enter'应为'\n'。如果您使用'enter',则会发送'e''n''t''e''r'五个主板事件......
  2. {modifiers: 'shift + alt'}应为{modifiers: 'shift+alt'}。因为修饰符组合的实现不会修剪空间...您可以向CasperJS发布拉取请求来修复...
  3. 好的,让我们讨论如何在该网络应用中运行您的代码......我发现我们可以通过点击play按钮来运行代码,因此无需按alt + shift + enter运行代码这很难实现......

    该脚本适合我:

    var casper = require('casper').create({
        verbose: true,
        logLevel: 'debug',
        viewportSize: {
            width: 1600,
            height: 900
        }
    });
    
    var cookie = "user=Sayalic0; token=<some_token>";
    var domain = "rcloud.social";
    cookie.split(";").forEach(function(pair){
        pair = pair.split("=");
        phantom.addCookie({
            'name': pair[0],
            'value': pair[1],
            'domain': domain
        });
    });
    
    
    casper.start('https://rcloud.social/edit.html?notebook=<note_book_id>')
    
    casper.then(function () {
        casper.wait(30000);//wait for page load
    }).then(function () {
        casper.capture('1.png')
    }).then(function () {
        casper.click("#run-notebook > i")// click run
    }).then(function () {
        casper.wait(10000)//wait code running ends
    }).then(function () {
        casper.capture('2.png');
    })
    
    casper.run()
    

    <强>截图

    <强> 1.png enter image description here

    <强> 2.png enter image description here