2016-09-28 360 views
3

我无法使用sendKeys()上传文件。这是我的代码使用sendKeys()在Selenium中上传文件不起作用

driver.findElement(By.xpath(Locators.browseFlagIconBtn)).sendKeys("D:\\Images\\icons.png"); 

我有文件类型的文件的输入标签上传

<input type="file" id="iconFlagFile" name="iconFile" onchange="setFlagIconFile()" value="" class=" file-input-opacity" style="position: absolute; z-index: 100; font-size: 200px; line-height: 200px; top: 0px; left: 0px; opacity: 0;"> 

然而,当我点击提交表单的按钮,其中该输入字段那么我重定向到以下页面:

enter image description here

导致此问题:

当我使用sendKeys()传递路径时,它会正确拾取需要上传的文件。但是,实际上传发生在用户点击提交按钮时。现在我不知道它为什么会搜索它在Chrome目录中选择的文件,例如:"C:\Program Files (x86)\Google\Chrome\Application\53.0.2785.116"

很明显,它将无法找到该文件。

问题:如何解决这个问题?让我知道是否需要提供更多信息。

回答

0

根据您的解释,我假设您有一个HTML标记,允许您从本地驱动器上载文件,但未启用。除非你点击提交按钮,否则不允许你上传文件。

在这种情况下,尝试编辑表单标签编辑,然后尝试调用的SendKeys()方法,你可以使用JavaScript执行

+0

将元素的html代码放到要放置路径的位置,这是很好的,它是输入文件类型。 – FayazMd

+0

我已添加html代码。我有一个类型文件的输入标签用于上传文件 –

0

请尝试以下JavaScript执行代码

编辑HTML元素
String filePath = "D:\\Images\\icons.png"; 
JavascriptExecutor jsx = (JavascriptExecutor) driver; 
jsx.executeScript("document.getElementById('iconFlagFile').value='" + filePath + "';"); 
+0

如果不行,请尝试以下操作: 'JavascriptExecutor js =(JavascriptExecutor)driver; (“document.getElementById('iconFlagFile')。style.display ='block';”); (“D:\\ Images \\ icons.png”); (“document.getElementById('iconFlagFile')。style.display ='none';”);' – FayazMd

0

请尝试这个文件上传。

String filename = "path of the file"; 
    File file = new File(filename); 
    String path = file.getAbsolutePath(); 
    // give the URL to upload 
    driver.findElement(By locator).sendKeys(path); 
+0

是的,我已经试过了。实际文件上传发生在用户点击提交按钮时,而不是在文件上传文件夹中选择文件时。所以不幸的是你提供的解决方案不适合我的情况。 :( –

+0

@UbaidAhmed你可以请发布实际的异常 –

+0

我没有得到任何异常,请参考附件的截图我提供了D:\的路径,但是当我提交表单时,它正在寻找C中的文件:\。 当我手动执行相同的步骤,那么它工作正常。当通过自动化完成时出现问题。 –