我正在使用nightwatch和browserstack,我想测试上传/下载功能。它在我的本地计算机上工作正常,但在browserstack上失败,因为它试图在该主机而不是本地PC上查找文件。 我知道,因为selenium 2它支持使用FileDetector上传文件以删除服务器:
var remote = require('selenium-webdriver/remote');
browser.setFileDetector(new remote.FileDetector());
var input = element(by.model("fileInput")),
input.sendKeys(path.resolve(__dirname, "filename."));
nightwatch是否提供将本地文件上传到远程服务器的任何功能?
另外,据我所知,nightwatch不使用selenium-webdriver而是将HTTP请求发送到远程服务器,所以我认为应该可以通过发送HTTP请求来实现此功能,如果删除服务器支持,对吧?
答案 0 :(得分:0)
要使用Remotewebdriver实例上传文件,Webdriver有一个FileDetector模块,可帮助检测本地计算机上的文件,首先将文件上传到Browserstack /任何云虚拟机,然后上传到您的Web应用程序。似乎Nightwatch没有实现selenium webdriver' remote.FileDetector'。但是,您可能希望在夜班测试中包含一个vanilla节点实现文件上传。您可以将浏览器实例移植到selenium webdriver实例并使用类似的东西:
driver.setFileDetector(new remote.FileDetector);
driver.get('http://www.fileconvoy.com/').then(function(){
driver.findElement(webdriver.By.id('upfile_0')).sendKeys('/home/user/file_name').then(function(){
driver.findElement(webdriver.By.id('readTermsOfUse')).click().then(function(){
driver.findElement(webdriver.By.id('upload_button')).click().then(function(){
driver.getTitle().then(function(title) {
console.log(title);
driver.quit();
});
});
});
注意:您可能需要以下导入/依赖项:require(' selenium-webdriver');要求('硒 - 的webdriver /远程&#39);
答案 1 :(得分:0)
Nightwatch提供了使用自定义命令扩展它的功能。 波纹管用于将文件发送到selenium网格设置。
Actions.uploadFile = function(filePath, callback) {
var archiver = require('archiver'),
zip = archiver('zip'),
fs = require('fs');
var buffers = [];
var getStream = function(filePath) {
return fs.readFileSync(filePath);
};
// This just pipes the read stream to the response object (which goes to the client)
zip.on('data', function(data) {
buffers.push(data);
});
zip.on('finish', function() {
postRequest(
'/file',
{ file: Buffer.concat(buffers).toString('base64') },
callback
);
});
zip.on('error', function(err) {
reject(err);
});
var filename = filePath.split('\\').pop().split('/').pop();
zip.append(getStream(filePath), { name: filename });
zip.finalize();
};
答案 2 :(得分:-1)
browser.setFileDetector(new remote.FileDetector());
在Node.js中不起作用。
setFileDetector
不是函数。