javascript - 填写非文本类型的输入字段,并在 CasperJS 中触发事件

标签 javascript dom-events phantomjs casperjs

我要在一个网站上做自动化测试,我想用CasperJS来学习。由于专有原因我不能给出太多代码。

这是我尝试填充的输入示例:

<input data-bind="value: firstname, valueUpdate: ['blur'], css: {valid:(firstname.isValid() )} " title="" class="valid" aria-required="true" id="firstname" name="firstname">

如您所见,此输入不是文本类型,并且没有 value 属性。因此,我无法使用 casper.fill() 方法。此外,如果我使用 evaluate() 输入网页范围并使用 document.querySelector 更改输入值,则从附加到输入上的文本更改不会被触发。

这是我的代码:

this.waitForSelector('#memberTitle', function then(){
    var testname = 'thisIsNotPermanent';
    this.evaluate(function(testname){
        document.querySelector('#firstname').value = testname;
    }, testname);
});

如果我立即捕获屏幕,我将看到输入框中写入的文本。但是,如果我等待 500 毫秒并进行另一次捕获,文本就会消失,因为我认为事件被触发或只是被清除,因为它实际上未能正确触发。

附加到输入的事件是模糊、更改和按键。

使用 CasperJS,我怎样才能尽可能地模仿用户使用键盘并充分使用网站已有的功能?

这些测试的重点是配合现有的情况。这个想法是不必手动浏览网站的 JavaScript。

最佳答案

这正是 casper.sendKeys(selector, keys) 的意思函数将发送 native 按键并(希望)触发该文本元素上的事件:

this.waitForSelector('#memberTitle', function then(){
    var testname = 'thisIsNotPermanent';
    this.sendKeys('#firstname', testname);
}).wait(20, function(){
    this.capture('screenshot.png');
});

<input>没有 type 的元素属性默认为 Text类型。

关于javascript - 填写非文本类型的输入字段,并在 CasperJS 中触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787823/

相关文章:

Javascript/jQuery - 需要在页面上查找原始文本,将后面的内容捕获到变量中,并用 HTML 替换原始文本

javascript - 有什么方法可以将 OpenTextFile 用于服务器目的吗?

javascript - 使用 Javascript 单击时捕获元素(具有单击事件绑定(bind)的元素)

javascript - 如何打开新选项卡并在新选项卡上运行脚本后立即关闭它

javascript - 使用 PhantomJS 进行单元测试时如何防止 img src 404 错误

javascript - Jquery tabs 边框线以扩展 div 部分内容

javascript - 需要制作网络表单来保存任何更改,即使不点击 "SEND"

javascript - 检查调用的函数

javascript - 我如何从 CasperJS 访问 iframe?

javascript - 通过比较 Javascript 中的 2 个二维数组来查找缺失元素