javascript - Selenium FindElement 会阻塞,直到文件上传完成

标签 javascript file-upload selenium jquery-file-upload

简短:

当我使用 SendKeys(path) 触发文件上传到代理元素(由 ExecuteScript 放置),然后通过 jquery.fileupload 插件代理到我的隐藏元素时,文件上传正常,但是当我尝试发出 FindElement,它会阻塞,直到服务器响应。

长:

我使用的是 2.4 C# Web 驱动程序、默认的 Firefox 驱动程序和 jquery 文件上传插件 (blue imp)。

流程首先单击按钮打开“概述对话框”,其中包含我的

<input id="fileUpload" type="file" name="files[]" accept="video/quicktime,video/x-ms-wmv">
<lablel for="fileUpload">Select a file</label>

组成对话框后,我有

jquery('#fileUpload').fileupload(self.fileUploadOptions);

正常使用时,用户单击标签,这会触发输入,然后触发并添加回调,检查大小/类型,如果确定,则更改为“进展”对话框,并执行数据。提交()

进度会持续进行,直到得到响应,此时最终对话框会显示一些结果,并且可以使用另一个按钮将其关闭。

简单来说:

  1. 打开一个对话框
  2. 将对话框中的模板设置为简介
  3. 选择一个文件
  4. 更改对话框中的模板以取得进展
  5. 启动 ajax(或 iframe)上传
  6. 更改对话框中的模板以完成

Selenium 无法访问 fileUpload 输入(隐藏),因此为了让 Selenium 触发文件上传,我最终不得不执行一些如下脚本:

  1. 添加新的输入元素:

    jQuery('', {id: 'tmpId', type: 'file', name:'files[]'}).appendTo('modalDivId')

  2. 触发回调:

    $('#tmpId').bind('更改', function (e) { $('#fileUpload').fileupload('add', { 文件:e.target.files || [{name: this.value}], 文件输入:$(这个) }); });

所以,现在创建 tmpId 输入元素后,我的 selenium 脚本会执行以下操作:

var path="\path\to\files";
var tmpInput = WebDriver.FindElement(By.Id("tmpId));
tmpInput.SendKeys(path);

这会触发添加回调,检查文件,将模板更改为“进度”,然后开始上传。 假设上传需要 60 秒,服务器将响应,然后模板将触发“完成”

问题是虽然:

tmpInput.SendKeys(path);

返回“立即”,所以我调用

var a = WebDriver.FindElement(By.Id("tmpId"));

此操作会一直阻塞,直到文件上传完成(60 秒)。即使进度条正在更新。

然后返回成功。

因为我想要验证这个进度模板,所以我真的很想在上传过程中访问 DOM。

有什么想法吗?

最佳答案

表单是否在流程中的任何地方提交?我的意思是提交是在任何地方触发还是刷新或单击 elemnet 或类似的?事实是,webdriver 是一个阻塞 API,当触发加载/刷新或类似操作时,webdriver 将检查各种内容以检查页面是否已完成加载(即 document.readyState == 'complete')等。

无论如何,应该可以覆盖这个策略,你可以尝试调查page load strategies

关于javascript - Selenium FindElement 会阻塞,直到文件上传完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108482/

相关文章:

java - Selenium moveByOffset 不做任何事情

Selenium 点击 Highcharts 系列

Javascript - 登录框不起作用

android - 从 android Api 23 及以上版本将图像上传到服务器

javascript - Joi 每个验证选项的自定义错误

file-upload - 上传文件的不同方法?

通过将文件拖到页面的任何位置来上传JSF文件

Python3 Selenium ChromeDriver 禁用扩展仅记录 Pyinstaller Windows 10

javascript - 在 div/class 数组中查找特定键

javascript - 使用 FileResult 保存文件并提示 'Save as...'