单击按钮使用 CasperJS 下载文件
Click a button to download a file using CasperJS
我想编写单元测试,通过使用 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();
});
当我尝试从浏览器的控制台执行相同的代码时,单击按钮并弹出下载 window。
我最初尝试检查 casperJS 中是否存在具有 assertExists
功能的按钮。断言通过,表明按钮存在。此外,输入数组有 2 个元素,一个是 CSRF 令牌的隐藏输入(我使用的是 Django),另一个是我要单击的按钮。
点击
PhantomJS(以及扩展名 CasperJS)有两个上下文。只有页面上下文 (evaluate()
) 可以访问 DOM。另一个问题是大多数元素在 PhantomJS 中没有实现 element.click()
功能,因此您需要使用其他类型的点击。
CasperJS 提供了一个 casper.click()
函数,几乎适用于所有情况。它可以 select 您想要通过 CSS select 或 XPath 表达式单击的元素。由于您要单击第二个输入,因此无法定义一般的 CSS select 或执行此操作的。在这种情况下必须使用 XPath 表达式。 CasperJS 提供了一个 XPath 实用程序:
var x = require('casper').selectXPath;
...
casper.then(function(){
this.click(x("(//input)[2]"));
});
请注意,XPath 表达式中的计数从 1 开始,CSS select 或
正在下载
PhantomJS(以及扩展名 CasperJS)不会在您单击某些内容时触发文件下载。您需要自己构建和发送请求。
有很多方法可以做到这一点。 Here is one example. Actually, a better way would be to use a PhantomJS fork that natively supports file downloading as part of a new event. See this answer了解更多详情。
我想编写单元测试,通过使用 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();
});
当我尝试从浏览器的控制台执行相同的代码时,单击按钮并弹出下载 window。
我最初尝试检查 casperJS 中是否存在具有 assertExists
功能的按钮。断言通过,表明按钮存在。此外,输入数组有 2 个元素,一个是 CSRF 令牌的隐藏输入(我使用的是 Django),另一个是我要单击的按钮。
点击
PhantomJS(以及扩展名 CasperJS)有两个上下文。只有页面上下文 (evaluate()
) 可以访问 DOM。另一个问题是大多数元素在 PhantomJS 中没有实现 element.click()
功能,因此您需要使用其他类型的点击。
CasperJS 提供了一个 casper.click()
函数,几乎适用于所有情况。它可以 select 您想要通过 CSS select 或 XPath 表达式单击的元素。由于您要单击第二个输入,因此无法定义一般的 CSS select 或执行此操作的。在这种情况下必须使用 XPath 表达式。 CasperJS 提供了一个 XPath 实用程序:
var x = require('casper').selectXPath;
...
casper.then(function(){
this.click(x("(//input)[2]"));
});
请注意,XPath 表达式中的计数从 1 开始,CSS select 或
正在下载
PhantomJS(以及扩展名 CasperJS)不会在您单击某些内容时触发文件下载。您需要自己构建和发送请求。
有很多方法可以做到这一点。 Here is one example. Actually, a better way would be to use a PhantomJS fork that natively supports file downloading as part of a new event. See this answer了解更多详情。