我要在一个网站上做自动化测试,我想用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/