当前位置: 首页 > 知识库问答 >
问题:

使用selenium上传文件

厍华清
2023-03-14

如何使用selenium webdriver通过窗口提示从本地上传文件?

我想执行以下操作:

  1. 点击窗口上的“浏览”选项
  2. 从窗口提示符转到保存文件的本地特定位置
  3. 选择文件,然后单击“打开”以上传文件。

共有3个答案

蓬新
2023-03-14

Selenium Webdriver并不真的支持这个。与非浏览器窗口的交互(比如本地文件上传对话框和基本验证对话框)已经成为WebDriver讨论板上讨论的话题,但是在这个问题上几乎没有进展。

过去,我通过使用 Fiddler2 等工具捕获基础请求,然后仅发送将指定文件附加为字节 blob 的请求来解决此问题。

如果您需要来自经过身份验证的会话的cookie,WebDriver.magage(). getCookies()应该在这方面为您提供帮助。

编辑:我在某个地方有这方面的代码,我会看看能不能找到一些你可以使用的东西。

public RosterPage UploadRosterFile(String filePath){
        Face().Log("Importing Roster...");

        LoginRequest login = new LoginRequest();
        login.username = Prefs.EmailLogin;
        login.password = Prefs.PasswordLogin;
        login.rememberMe = false;
        login.forward = "";
        login.schoolId = "";

        //Set up request data
        String url = "http://www.foo.bar.com" + "/ManageRoster/UploadRoster";
        String javaScript = "return $('#seasons li.selected') .attr('data-season-id');";
        String seasonId = (String)((IJavaScriptExecutor)Driver().GetBaseDriver()).ExecuteScript(javaScript);
        javaScript = "return Foo.Bar.data.selectedTeamId;";
        String teamId = (String)((IJavaScriptExecutor)Driver().GetBaseDriver()).ExecuteScript(javaScript);

        //Send Request and parse the response into the new Driver URL
        MultipartForm form = new MultipartForm(url);
        form.SetField("teamId", teamId);
        form.SetField("seasonId", seasonId);
        form.SendFile(filePath,LoginRequest.sendLoginRequest(login));
        String response = form.ResponseText.ToString();
        String newURL = StaticBaseTestObjs.RemoveStringSubString("http://www.foo.bar.com" + response.Split('"')[1].Split('"')[0],"amp;");

        Face().Log("Navigating to URL: "+ newURL);
        Driver().GoTo(new Uri(newURL));

        return this;
    }

其中MultiPartForm为:MultiPartForm

和登录请求/响应:登录请求登录响应

上面的代码是 C# 格式的,但 Java 中有一些等效的基类,它们将执行您需要它们执行的操作来模拟此功能。

所有代码中最重要的部分是MultiPart form. SendFile方法,这就是神奇发生的地方。

成浩漫
2023-03-14

我使用了以下三种不同的方式在selenium webdriver中上传文件。

  1. 第一个简单的例子是找到元素并将文档的绝对路径键入其中。但是我们需要确保HTML字段是输入类型<代码>Ex:

下面是简单的代码:

    WebElement element = driver.findElement(By.name("uploadsubmit"));
    element.sendKeys("D:/file.txt");
    driver.findElement(By.name("uploadSubmit"));
    String validateText = driver.findElement(By.id("message")).getText();
    Assert.assertEquals("File uploaded successfully", validateText);

第二种情况是使用Robot类上传,该类用于(生成本机系统输入事件)控制鼠标和键盘。

另一种选择是使用“AutoIt”(开源工具)。

您可以找到以上三个示例:-使用Selenium Webdriver上传文件

益银龙
2023-03-14

您是否尝试过在正确的文件输入控件上使用输入()

WebElement fileInput = driver.findElement(By.id("some id"));
fileInput.sendKeys("C:/path/to/file.extension");
 类似资料:
  • 问题内容: 码: 但是我收到以下错误: 问题答案: 问题是-您将键发送到不“可交互” 的元素,不接受键-因此出现“无法聚焦元素”错误。 您链接的解决方案背后的想法是 将密钥发送到 负责文件上传的元素。在HTML中找到此元素,然后向其发送密钥。 请注意,此元素可能是不可见的。在这种情况下,你应该先使其可见的工作。 更新: 好的,现在我们至少知道哪个元素是我们想要的元素: 由于找不到此元素很麻烦,请尝

  • 我寻找解决方案,但我没有找到任何除了集成它与自动或自动热键... 第一行打开Firefox的文件上传框。

  • 我想为Python Selenium上传一个文件,但是send_keys方法(用文件的目录发送密钥)不起作用,我得到一个'message:element not interactable'。这是由于事实上,我的上传按钮不包含一个“输入”的html代码。我目前的代码允许你点击“上传文件”按钮,然后打开小的Mac Os窗口。在那之后,我不知道我能做什么。很明显,send_keys方法不起作用。 我正在

  • 问题内容: 如何使用selenium测试工具在Web应用程序上上传图片?我正在使用python。 我尝试了很多事情,但没有任何效果。 问题答案: 上载输入控件将打开一个本机对话框(由浏览器完成),因此通过Selenium单击控件或浏览按钮将仅弹出对话框,并且测试将挂起。 解决方法是通过JavaScript设置上传输入的值(在Java中是通过JavascriptExecutor完成),然后提交表单。

  • 我正在使用Selenium WebDriver和PhantomJs(C#)。在此之前,我使用FireFox而不是PhantomJs,并以以下方式上传了一个文件: 我的问题: 然而,当我使用PhantomJS时,这将崩溃。 在我看来,对于许多使用PhantomJS+Selenium的人来说,这是一个常见的问题,这让我想知道为什么这个bug还没有得到修复。

  • 我有一个ASP。NET文件上载控件,当您单击上载按钮选择要上载的文件时,该控件将打开一个窗口。但问题是,网络驱动程序无法识别窗口,因此无法选择要上载的文件。 我在stackoverflow中找到了许多使用sendkey输入文件路径的解决方案。我认为当你有html文件上传控制时,这是有效的。在我的情况下,我有ASP。NET文件上传控件,它没有文本框,我可以在其中使用sendkey输入文件路径。 我该