【问题标题】:Remote File Upload Protractor test远程文件上传量角器测试
【发布时间】:2016-03-16 21:41:03
【问题描述】:

我正在量角器中编写测试,量角器是一个基于 JS 的框架和 selenium 测试堆栈,用于运行测试。我面临一个必须测试文件上传的问题。

我遇到的问题是我要上传的文件在测试包中,而 selenium 节点是一个单独的服务器,因此它不会获取文件。 我尝试使用文件描述符,尽管文件名已设置,但内容未上传。

下面是我的代码 sn-p。

  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 中编写过文件上传测试吗? 非常感谢您的帮助

【问题讨论】:

    标签: javascript angularjs selenium protractor selenium-server


    【解决方案1】:

    首先,要使文件上传与远程 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);
        });
    });
    

    另见相关问题:

    【讨论】:

    • 我必须上传几个不同规格文件的文件,所以我将其添加到 protractor.config 文件的onPrepare() 部分。效果很好。感谢您的回答。
    【解决方案2】:

    感谢@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');
    

    【讨论】:

      【解决方案3】:

      这个解决方案对我有用。 下面两行代码就成功了。

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

      我可以上传文件远程服务器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-18
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 2016-07-11
        相关资源
        最近更新 更多