如果元素是<label>标记名,如何上传文件?

时间:2017-10-30 10:46:08

标签: upload protractor

这是HTML代码:

"Other"

您可以在图片详细信息中看到: enter image description here 如果元素不是“input”标记名,如何处理上传函数?

当前解决方案:

元素输入[type =“file”]隐藏在屏幕后面,您可以将密钥发送到此元素(用于上传一个或多个文件)。 这是我的代码:

<px-upload-zone class="dz-clickable" _ngcontent-c34="" _nghost-c35="">
<div class="upload-container" _ngcontent-c35="">
<!---->
<div class="dialog-wrapper dz-default dz-message" _ngcontent-c34="">
<span _ngcontent-c34="">Drag & Drop</span>
<span class="browse-label" _ngcontent-c34="">
<span _ngcontent-c34="">or</span>
<label class="link-label" _ngcontent-c34="">browse</label>
</span>
</div>
<div class="upload-summary" _ngcontent-c35="">
<div class="dropzone-previews" _ngcontent-c35="">
</div>
</px-upload-zone>

2 个答案:

答案 0 :(得分:4)

您可以在屏幕后面找到隐藏的输入[type =“file”]元素,当您拖放文件或上传文件时,它会在内部将值设置为隐藏输入[type =“file”]元素。您可以取消隐藏input元素,然后使用sendKeys上传文件。我之前遇到过类似的问题。

答案 1 :(得分:1)

当你点击它时,如果你得到这样的桌面弹出窗口: -

sample of desktop window

然后您可以使用自动对其执行操作(桌面窗口)。 请参阅以下链接

https://www.npmjs.com/package/autoit

过程是: -

  1. 在您的应用程序中自动安装它。
  2. 下载自动查找工具(https://www.autoitscript.com/site/autoit/downloads/)并获取元素。
  3. 编写脚本并在需要时执行。
  4. 代码示例: -

    var au = require('autoit');
    
    au.Init();
    au.WinWait("[Title:Open]");
    au.ControlFocus("Open", "", "Edit1");
    au.ControlSetText("Open", "", "Edit1", absolutePath); 
    au.Sleep(1000);
    au.ControlClick("Open", "", "Button1");