单击按钮以使用CasperJS下载文件

Click a button to download a file using CasperJS

本文关键字:CasperJS 下载 文件 按钮 单击      更新时间:2023-09-26

我想编写单元测试,通过使用casperJS单击表单按钮来下载文件。我尝试使用document.getElementsByTagName 到达按钮并以JavaScript的方式单击它。但是我得到一个错误信息:

TypeError: 'undefined' is not a function (evaluating 'inputs[1].click()')

未通过测试的代码段:

casper.then(function() {
    var inputs = document.getElementsByTagName('input');
    inputs[1].click();
});

当我尝试在浏览器的控制台中执行相同的代码时,按钮被点击并弹出下载窗口。

我最初试图检查casperJS中assertExists功能按钮的存在。传递断言,指示按钮存在。此外,输入数组有2个元素,一个是隐藏的CSRF令牌输入(我使用Django),另一个是我想要点击的按钮。

点击

PhantomJS(以及扩展后的CasperJS)有两个上下文。只有页面上下文(evaluate())可以访问DOM。另一个问题是,大多数元素不实现element.click()函数在PhantomJS,所以你需要使用另一种类型的点击。

CasperJS提供了一个casper.click()函数,它几乎在所有情况下都有效。它可以通过CSS选择器或XPath表达式选择要单击的元素。由于您想要单击第二个输入,因此不可能定义一个通用的CSS选择器来执行此操作。在这种情况下必须使用XPath表达式。CasperJS提供了一个XPath实用程序:

var x = require('casper').selectXPath;
...
casper.then(function(){
    this.click(x("(//input)[2]"));
});

请注意,在XPath表达式和CSS选择器中计数从1开始。


下载

PhantomJS(和扩展CasperJS)不会触发文件下载,当你点击的东西。您需要自己构建和发送请求。

做这件事有很多方法。这里有一个例子。实际上,更好的方法是使用原生支持文件下载的PhantomJS分支作为新事件的一部分。