gpt4 book ai didi

javascript - 异步功能取决于 Protractor 测试中的外部模块

转载 作者:行者123 更新时间:2023-11-30 10:09:37 25 4
gpt4 key购买 nike

我要

  1. 将图像文件保存在远程网络服务器上,并
  2. 上传到另一台服务器

在 Protractor 测试中。

// depend on a external module
var fs = require('fs');

// save remote file(url) to local(dest)
var download = function (url, dest) {

// let this function be async
browser.executeAsyncScript(function (url, dest, done) {

var file = fs.createWriteStream(dest);
var request = http.get(url, function (response) {
response.pipe(file);
file.on('finish', function () {
file.close(done);
});
});
}, url, dest);
};

describe('', function () {
it('', function () {
browser.get('http://...');

download('http://.../foo.jpg', 'foo.jpg'); /*** DOESN'T WORK! ***/

var absolutePath = path.resolve(__dirname, 'foo.jpg');
$('input[type=file]').sendKeys(absolutePath);
$('#uploadButton').click();
...

但这行不通:

   Stacktrace:
UnknownError: javascript error: fs is not defined

当我将 var fs = require('fs'); 放入 download 函数时,错误信息如下:

   Stacktrace:
UnknownError: javascript error: require is not defined

最佳答案

当您调用 executeAsyncScript 时,您传递的函数被序列化并在浏览器内执行。该函数不会在 Protractor 测试的上下文中运行,而是在浏览器中运行。

您需要创建一个在您完成文件下载后解析的 promise 。

// depend on a external module
var fs = require('fs');

describe('', function () {

// save remote file(url) to local(dest)
var download = function (url, dest) {
// Create a promise that will be resolved after download.
var d = protractor.promise.defer();

var file = fs.createWriteStream(dest);
var request = http.get(url, function (response) {
response.pipe(file);
file.on('finish', function () {
file.close();
// The file has been read, resolve the promise
d. fulfill();
});
});

// Return the promise
d.promise;
};

it('', function () {
browser.get('http://...');

// Get the file and wait for the promise to resolve to move on
download('http://.../foo.jpg', 'foo.jpg').then(function() {
// Make sure you specify a path where you can write and read the file.
var absolutePath = path.resolve(__dirname, 'foo.jpg');
$('input[type=file]').sendKeys(absolutePath);
$('#uploadButton').click();
...
});

如果有用请告诉我

这是文档:https://code.google.com/p/selenium/wiki/WebDriverJs#Deferred_Objects

关于javascript - 异步功能取决于 Protractor 测试中的外部模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27245332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com