找到input元素并将filepath发送到上传文件

时间:2016-03-03 10:45:13

标签: html angularjs selenium

我正在尝试使用selenium web驱动程序上传文件。 UI有一个上传按钮,位于div标签内。该按钮具有隐藏文本框,该文本框位于span标记内。我可以找到直到标签。

<div class="ng-scope" ng-if="showUpload" style="padding-bottom:5px;">
<div class="btn ng-binding" ng-class="class" flow-drop="" style="padding-top:30px;vertical-align:middle;width:370px;height:100px;background-color:#eee;border:1px solid #ccc" ng-style="style" flow-drag-leave="style={border:'1px solid #ccc'}" flow-drag-enter="style={border:'1px solid #007670'}" flow-prevent-drop="">Drag and Drop your files here.</div>
<span class="ng-binding" style="padding:0 20px">or</span>
<span class="btn btn-primary ng-binding" flow-attrs="{accept:'image/*,.pdf,.csv,.txt,.doc'}" flow-btn="">
<i class="icon icon-file"/>
Upload File                       
<input type="file" style="visibility: hidden; position: absolute; width: 1px; height: 1px;" multiple="multiple" accept="image/*,.pdf,.csv,.txt,.doc"/>
</span>
</div>

我能够通过firepath找到输入标记,但是使用java代码也不行。

WebElement m_upload = driver.findElement(By.CssSelector("input[type='files']"));返回null。 谁能告诉我怎么做呢?

2 个答案:

答案 0 :(得分:0)

尝试以下代码

//Give your file path here
  var orgFile = @"C:\Users\username\Downloads\pdf.pdf";
//get uploadfile input and send pat using SendKeys 
            var uploadFile = driver.FindElement(By.CssSelector("input[type='file']"));
            uploadFile.SendKeys(orgFile);

如果有任何问题,请告诉我。

答案 1 :(得分:0)

您无法对隐藏元素执行任何操作。首先,您必须执行一项操作,以更改该隐藏输入元素的可见性。

还要记住,页面正在使用AngularJS并且您正在使用Selenium对其进行测试,因此可能存在同步问题,因此最好使用Protractor对其进行测试,或者通过在之前放置Implicit或Explicit等待语句来在selenium中处理它上传文件。

我认为它会解决问题。