2016-03-03 53 views
0

我想用selenium web驱动程序上传文件。用户界面有一个div标签内的上传按钮。该按钮具有位于span标签内的隐藏文本框。我可以找到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。 任何人都可以告诉我如何去做这件事?

+0

你检查文件单数与文件复数? –

+0

我无法找到输入文本框。只有这样我才能使用sendKeys()发送文件。 – Ansu

+0

引起:org.openqa.selenium.NotFoundException:在VISIBLE状态中找不到与'By.cssSelector:input [type ='files']'匹配的元素。 – Ansu

回答

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); 

如有问题,然后让我知道。

0

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

另外请记住,页面使用的是AngularJS,并且您正在使用Selenium进行测试,因此可能存在同步问题,因此更好的方法是使用量角器对其进行测试,或者通过将Implicit或Explicit等待语句在上传文件之前。

我认为它会解决问题。

+0

没有没有工作。 – Ansu

相关问题