找到输入元素并发送文件路径来上传文件
问题描述:
我想用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。 任何人都可以告诉我如何去做这件事?
答
试试下面的代码
//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);
如有问题,然后让我知道。
答
您无法对隐藏元素执行任何操作。首先,您必须执行一个操作来更改该隐藏的输入元素的可见性。
另外请记住,页面使用的是AngularJS,并且您正在使用Selenium进行测试,因此可能存在同步问题,因此更好的方法是使用量角器对其进行测试,或者通过将Implicit或Explicit等待语句在上传文件之前。
我认为它会解决问题。
+0
没有没有工作。 – Ansu
你检查文件单数与文件复数? –
我无法找到输入文本框。只有这样我才能使用sendKeys()发送文件。 – Ansu
引起:org.openqa.selenium.NotFoundException:在VISIBLE状态中找不到与'By.cssSelector:input [type ='files']'匹配的元素。 – Ansu