javascript - 使用 Protractor/ Jasmine 操纵浏览器文件上传窗口

标签 javascript npm jasmine protractor

我使用的工具: Protractor 3.3.0、Jasmine 2.4.1、Selenium 独立服务器

如标题所示-

我正在创建一个导航到特定页面然后单击“上传文件”按钮的测试。然后这会触发浏览器的文件上传窗口(类似于 Windows 资源管理器的窗口)。问题是找出是否有一种方法可以按照 Protractor/Jasmine 使用 JavaScript 来操纵该窗口本身。

前段时间我用 Java 做了类似的事情,这样做我做了一个:找到所有窗口,切换到堆栈顶部,键盘输入到选项卡到输入字段,从剪贴板粘贴,然后键盘输入到提交它。

我目前在上述解决方案中遇到的问题是,查找所有窗口只会产生当前浏览器窗口,而不是上传文件窗口。

我知道有一个通过 npm 的 javascript 的 java 导入,但我无法立即让它工作,我宁愿直接从 Protractor/Jasmine 本身做一些事情,而不是需要一堆库。如果那是我唯一的选择,那么我会更努力地挖掘。

我也知道我可以通过 HTML 注入(inject)文件路径:$('input[type="file"]'.sendKeys(filePath);,但因为我模拟用户操作我更愿意访问上传窗口并以这种方式执行操作以获得更完整的测试。

如有任何想法/建议,我们将不胜感激。

最佳答案

有更简单的方法,不用 AutoIt。使用 selenium 的 FileDetector 功能。这是我如何使用它的示例(需要仅适用于节点 5.X)。对我来说,它与 selenium grid、localruns、Saucelabs 完美配合。

var FileDetector = require('selenium-webdriver/remote/index.js').FileDetector;
browser.setFileDetector(new FileDetector());

$('css hidden upload input field').sendKeys(filePath).then(function () {
     console.log('Uploading file:', filePath);
});
// File upload could take a lot of time. Try to use as small file as possible.
// Here you should add browser.wait() with your condition that will indicate that upload finished, so you can continue test flow.

也检查这个问题 - Remote File Upload Protractor test

关于javascript - 使用 Protractor/ Jasmine 操纵浏览器文件上传窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595600/

相关文章:

typescript - Vue 库类型

javascript - NPM 尝试查找 Shell 脚本失败

javascript - Angular Directive(指令) : It's possible testing that certain characters are rejected in a keypress event?

javascript - 函数内 Restangular 的 jasmine 测试用例

javascript - 删除 foreach 循环中的匹配项

javascript - 如何制作一个会改变网站上文字的javascript?

npm - Webpack 开发服务器 : Unknown argument: NODE_ENV

javascript - Angular 服务的 Jasmine 测试无法解决延迟调用

javascript - Array.map + parseInt

javascript - 未捕获的语法错误 : Invalid regular expression flags