单击按钮以使用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();
});
当我尝试在浏览器的控制台中执行相同的代码时,按钮被点击并弹出下载窗口。
我最初试图检查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分支作为新事件的一部分。相关文章:
- 如何在生成下载文件时显示加载动画
- 直接下载文件,而不是从window.open(url)
- 如何使用javascript或html下载PDF格式的填写表单
- Javascript运行php文件,然后下载文件
- 在单击href链接的同时下载文件
- 尽管链接成功并已成功下载,但未找到NPM模块
- 通过php页面中的js强制下载txt
- CasperJS在使用sendKeys时不会上传文件
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 通过javascript下载文件时设置文件名
- 如何在Edge中下载图像/png数据URI
- 下载使用POST数据动态生成的文件
- CasperJS-下载生成的没有URL的文件
- 如何使用 casperjs 下载与我在浏览器中看到的页面相同的页面
- 下载基于 Content-Type JavaScript Casperjs 的链接
- CasperJS下载并将文件保存到特定位置
- Casperjs下载帖子附件
- 我们如何使用CasperJS实现基于浏览器的下载窗口的自动化
- 如何使用casperjs下载没有url的文件
- 单击按钮以使用CasperJS下载文件