用Dropzone.js上传NIghtwatch.js文件

时间:2015-09-22 11:41:45

标签: javascript selenium file-upload dropzone.js nightwatch.js

我正在尝试使用nightwatch.js在我们的文件上传中上传pdf文件,但事情是没有输入类型="文件"在我们上传。 html看起来像这样:

<form id="dropzone" action="/v2/asset/56013895934fd606006fb314" class="dropzone dz-clickable">
    <div class="dz-clickable" id="dropzonePreview">
        <i class="fa fa-cloud-upload main-icon initial-icon"></i>
    </div>
    <div class="dz-default dz-message">
        <span>Drop a file here or click icon above to upload an image</span>
    </div>
</form>

我尝试将密钥发送到表单,div和i但是无济于事它不会工作。这是关于我如何尝试上传文件的代码:

var uploadInvoice = function(browser) {
    browser
        .waitForElementPresent(dashboardselector.view_assignment, 20000)
        .click(dashboardselector.view_assignment)
        .waitForElementVisible(".fa-plus", 20000)
        .click(".fa-plus")
        .click(".regionBillAsset > div:nth-child(1) > a:nth-child(1)")
        .setValue("#dropzone", require('path').resolve(__dirname+'/document.pdf'))
        .waitForElementVisible(".after-success", 20000)
        .click(".after-success")
};

上传从我的代码的setvalue部分开始。上半部分只是进入上传模式的步骤。在此先感谢!!

更新 我在html上找到了一个隐藏的输入字段,但即使我使用setValue,它也不会上传我的文件。

4 个答案:

答案 0 :(得分:2)

我使用Dropzone.js上传文件。它使输入类型=&#34;文件&#34;隐藏。并且nightwatch.js没有对隐藏元素设置值,因此我们需要在设置值之前可见输入元素。

解决方案

第1步:使隐藏的输入元素可见

第2步:将值设置为该输入元素

下面是我上传图片的功能测试用例。

'uploadin the image': (browser) => {
    browser
      .execute("document.querySelectorAll('input[type=file]')[0].style.display = 'block';")
      .pause(100)
      .setValue('//div[@id="Upload Icon"]/input[@type="file"]', require('path').resolve(__dirname + '/categoryIcon.png'))
      .waitForElementVisible('//div/span[text()="Change Icon"]', 5000)
      .assert.containsText('//div/span[text()="Change Icon"]', 'Change Icon')
      .pause(2000)
      .end();
  }

execute正在将输入元素的样式从none更改为block。 这是文档链接http://nightwatchjs.org/api#execute

.execute("document.querySelectorAll('input[type=file]')[0].style.display = 'block';")

document.querySelectorAll(&#39; input [type = file]&#39;)将返回元素数组,在我的情况下,我需要第0个位置的元素,所以我在querySelectorAll的末尾添加了[0]

注意:您还可以在控制台上运行此JavaScript代码,以查看它是否正在选择正确的元素。

.setValue('//div[@id="Upload Icon"]/input[@type="file"]', require('path').resolve(__dirname + '/categoryIcon.png'))

在我的情况下,有一个id为id =&#34;上传图标&#34;输入类型=&#34;文件&#34;

答案 1 :(得分:0)

我和你在同一个位置。至于隐藏的输入,我相信nightwatch只能上传可见元素。

答案 2 :(得分:0)

你可以像这样看到&gt;

client.execute(function(data){
      document.querySelector('input[type="file"]').className="";
    }, [], function(result){
      console.log(result);
});

之后,您可以设置上传值。

答案 3 :(得分:0)

截至Dropzone v3.12.0(注:最新版本为v5.4.0)

您可以在nigthwatch.js中执行此操作以上传文件。

browser
.execute(`
 // this makes the DropZone hidden input, visible

document.querySelector('input[type="file"]').style.visibility = "visible";
`)
.setValue('input.dz-hidden-input', AbsolutePathToFile)