【问题标题】:File Upload functionality of Selenium web driver not working through sendkeysSelenium Web 驱动程序的文件上传功能无法通过 sendkeys 工作
【发布时间】:2014-02-10 22:14:47
【问题描述】:

重现步骤:-

转到:-

https://talentconnect.pge.com/sap/bc/webdynpro/sap/hrrcf_a_unreg_job_search?sap-client=810&sap-wd-configId=ZPERJ_A_UNREG_JOB_SEARCH#

用户名:- softwaretesting805@gmail.com 密码:- 1Selenium@

搜索并申请任何工作并转到附件页面,然后单击添加按钮。 我在这里无法通过 Selenium 上传任何文件。

1) 我正在使用 sendkeys 来回答 docType 和 docName 问题。

2) Browse 元素在表单中,所以我首先使用 sendkeys 发送文件路径,然后在表单元素上调用提交函数。

3) 之后我点击上传按钮。

问题似乎在于处理浏览按钮,在 chromedriver 中,如果我转到浏览选项卡,手动浏览文件,然后通过代码运行其余部分,则文件上传成功。

我正在使用下面的代码来浏览和上传。

List<WebElement> attachButtons = driver.getDriver().findElements(By.xpath("//input[@type=\"file\"]"));
for (int i = 0; i < 5; i++)
{
    if (attachButtons != null && attachButtons.size() > 0 && attachButtons.get(0).isDisplayed())
    {
        attachButtons.get(0).sendKeys("/home/user/path/to/file");
        SeleniumUtils.pause(1 * 1000);
        List<WebElement> formElements = driver.getDriver().findElements(By.tagName("form"));
        if(formElements != null && formElements.size() > 0)
        {
            formElements.get(0).submit();
        }
        break;
    }
    SeleniumUtils.pause(3 * 1000);
}
List<WebElement> uploadButtons = driver.getDriver().findElements(By.xpath("//a[@ct=\"B\"]"));
if (uploadButtons != null && uploadButtons.size() > 0)
{
    WebElement uploadButton = null;
    for(WebElement button : uploadButtons)
    {
        if(button.isDisplayed() && button.getText().contains("Upload"))
        {
            uploadButton = button;
            break;
        }
    }
    if(uploadButton != null)
    {
        uploadButtons.get(0).click();
    }
}

非常感谢任何帮助。

谢谢!

【问题讨论】:

标签: javascript forms file-upload selenium selenium-webdriver


【解决方案1】:

我遇到了类似的问题。它已通过使用 getAbsolutePath 解决。试试下面的代码,看看是否有帮助。

File file = new File("/home/user/path/to/file");
attachButtons.get(0).sendKeys(file.getAbsolutePath());

另一种方法是使用 java 脚本。你可以使用 JavaScriptExecutor,如下:

String jsScript = "var input = document.getElementsByTagName('input')[0];"
        +"input.value='/home/user/path/to/file';";
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript(jsScript);

【讨论】:

  • 您可以尝试使用 Javascript 将此元素的值设置为您的文件路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2013-07-13
  • 2015-09-17
相关资源
最近更新 更多