【问题标题】:Expect file browser open on click of button期望在单击按钮时打开文件浏览器
【发布时间】:2015-04-24 06:43:54
【问题描述】:

我有一个<button>,通过触发点击隐藏的<input type="file"> 来打开文件浏览器。 (我在输入上监听 change 事件以访问用户选择的文件。)

使用量角器,我如何检查文件浏览器是否在首次单击<button> 时打开?

我不向用户公开<input type="file"> 的原因是为了更好地控制样式,<button> 可以做到这一点。

【问题讨论】:

  • 我认为你会遇到这种方法的问题。首先,<input type="file"> 上的触发器是否适用于所有常见的浏览器?
  • @frhd 我测试了最近的 Chrome、Firefox 和 IE11,它们都打开了文件浏览器。就我的目的而言,这很好。
  • 这里有一些关于检查文件浏览器对话框是否打开的讨论stackoverflow.com/questions/11647113/… ..

标签: javascript angularjs selenium-webdriver protractor e2e-testing


【解决方案1】:

这里的关键问题是您不需要检查文件对话框是否正在打开(实际上是selenium cannot control or check whether a file dialog is being opened) - 浏览器在单击“文件”input 时所做的事情是有问题的您的应用范围。

相反,您可能需要检查一下,一旦您点击了buttoninput 元素上就会触发一个“点击”事件。添加事件监听器并使用executeAsyncScript()(未测试):

var button = element(by.css(".mybutton"));
var input = element(by.css(".myinput"));

var script = 'var button = arguments[0], ' +
             '    input = arguments[1], ' +
             '    callback = arguments[arguments.length - 1];' +
             'input.addEventListener("click", function (e) { callback() });' +
             'button.click()';

browser.executeAsyncScript(script, button, input);

【讨论】:

  • 我在单元测试中有与此类似的代码,测试触发输入点击的指令。在 E2E 测试中具有此功能并不能完全实现从最终用户的角度测试应用程序的行为。例如,我在 3 个浏览器上手动测试了这种技术是否有效:也许我隐藏了文件输入,导致对 click() 的调用被忽略?你的测试不会解决这个问题。有一种方法可以让量角器检查显示的警告框,而无需触摸 window.alert,所以我希望文件对话框也有类似的方法。
  • @MichalCharemza 感谢您的反馈!很抱歉没有提到这一点,但是没有办法控制或检查文件对话框是否打开 - 它超出了 selenium 的控制。您可以做的另一件事是使输入可见(请参阅this),将密钥发送给它设置上传文件路径(请参阅this),提交表单并检查它是否已成功提交..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多