我在量角器中编写测试,这是一个基于JS的框架和用于运行测试的selenium测试堆栈。我正面临一个我必须测试文件上传的问题。
我遇到的问题是我试图上传的文件是在测试包中,而selenium节点是一个单独的服务器,因此它不会获取该文件。 我尝试使用文件描述符,虽然文件名设置内容不上传。
以下是我的代码段。
var remote = require('selenium-webdriver/remote');
browser.setFileDetector(new remote.FileDetector());
var absolutePath = path.resolve(__dirname, "../specs/data/baseProducts.csv");
$('input[type="file"]').sendKeys(absolutePath);
你有相同的输入吗? 或者您是否知道有人使用selenium在JS中编写文件上传测试? 非常感谢您的帮助
答案 0 :(得分:11)
首先,要使文件上传与远程selenium服务器一起使用,您需要最新的protractor
(当前为3.0.0)(将最新的selenium-webdriver
nodejs包作为依赖项)。
然后,这两行对于能够通过线路将文件发送到selenium节点至关重要:
var remote = require('selenium-webdriver/remote');
browser.setFileDetector(new remote.FileDetector());
而且,现在您应该可以像在本地运行测试一样上传文件。
完成工作测试(在BrowserStack上测试,非常适合我):
var path = require('path'),
remote = require('selenium-webdriver/remote');
describe("File upload test", function () {
beforeEach(function () {
browser.setFileDetector(new remote.FileDetector());
browser.get("https://angular-file-upload.appspot.com/");
});
it("should upload an image", function () {
var input = element(by.model("picFile")),
uploadedThumbnail = $("img[ngf-src=picFile]");
// no image displayed
expect(uploadedThumbnail.isDisplayed()).toBe(true);
// assuming you have "test.jpg" right near the spec itself
input.sendKeys(path.resolve(__dirname, "test.jpg"));
// there is a little uploaded image displayed
expect(uploadedThumbnail.isDisplayed()).toBe(true);
});
});
另见相关问题:
答案 1 :(得分:0)
感谢@alecxe的回答!
我刚遇到这种情况,试图将一些文件上传到BrowserStack。在我的情况下,我使用 Cucumber - Protractor - NodeJs - BrowserStack 。此代码已经过测试,在本地环境和BorwserStack中工作。
let path = require('path');
let remote = require('selenium-webdriver/remote');
this.When(/^I upload a file$/, () => {
browser.setFileDetector(new remote.FileDetector());
var fileToUpload = '../image_with_title.jpg';
var absolutePath = path.join(__dirname, fileToUpload);
page.fileupload.sendKeys(absolutePath);
});
神奇的界限是:
let remote = require('selenium-webdriver/remote');
答案 2 :(得分:0)
此解决方案对我有用。 下面的两行代码可以解决问题。
var remote = require('selenium-webdriver/remote');
browser.setFileDetector(new remote.FileDetector());
我能够上传文件远程服务器。