【问题标题】:How can I test an input type="file" with Browserstack如何使用 Browserstack 测试输入类型 =“文件”
【发布时间】:2017-07-19 21:27:29
【问题描述】:

所以,我一直在尝试使用 Browserstack 和 Intern.js 测试输入 type="file",但由于 Browserstack 在我的计算机中搜索文件,所以我不断收到“找不到文件”错误。

我知道 Browserstack 具有上传/下载功能,但从他们的文档中我不太了解如何使用它。

【问题讨论】:

标签: javascript html intern browserstack


【解决方案1】:

问题似乎没有什么不同。假设您在测试页面上收到“找不到文件”错误,我相信您的 type 命令只是将密钥发送到远程浏览器的元素。

对于'file'类型的输入元素,type命令应该首先将文件从本地机器上传到远程机器,然后透明地上传到你的测试页面.如果这不起作用,那么您的元素大多不是“file”类型,或者您使用的实习生版本不支持远程上传/有错误。

如果你有 selenium 独立服务器和 webdriver 设置,它使用 remotewebdriver,它也应该在本地失败。

从“https://theintern.github.io/leadfoot/module-leadfoot_Command.html#type”中提取(由 jason0x43 共享)


从 1.5 开始,如果 WebDriver 服务器支持远程文件上传,并且您在本地计算机上键入文件的路径,则该文件将透明地上传到远程服务器,并且将键入远程文件名。如果您不想上传本地文件,请改用leadfoot/Session#pressKeys。


解决方案(对我有用):


示例代码:

function () {
      return this.remote
        .get(require.toUrl('http://www.fileconvoy.com/'))
        .findById('upfile_0')
          // .type('C:\\Users\\hello\\Desktop\\documents\\doc-sample1.doc')
          .type("//tmp//upload.log")
          .end()
        .findById('readTermsOfUse').click().end()
        .findById('upload_button').click().end()
        .sleep(5000)
    }

---------

conf.js

  capabilities: {
    fixSessionCapabilities: true,
    remoteFiles: true,
    .
    .
    .
  },

【讨论】:

  • 嗨 Sanket,感谢您的详细回答。我刚刚更新了所有软件包,但它仍然不起作用。我联系了 Browserstack,他们说我应该将这两行添加到我的测试顶部:var remote = require('selenium-webdriver/remote'); driver.setFileDetector(new remote.FileDetector); 。但我不知道如何应用它,因为我使用的是 Intern.js。从 Leadfoot 文档的这个 sn-p 来看,它似乎应该已经这样做了。
  • 我的设置:Node - v6.9.4,NPM - 4.1.1,intern - 3.4.6,leadfoot - 1.7.4 仅使用 type 在此设置中不起作用。进一步参考github.com/theintern/leadfoot/issues/51#issuecomment-135939441 解释说有一些修复改变了 type 的行为。我尝试添加这两个功能,并且 type 命令刚刚为本地文件工作。 fixSessionCapabilities: trueremoteFiles: true
  • 圣洁!谢谢!那行得通,实际上我只是将 fixSessonCapabilities 更改为 true 并将 remoteFiles 放在 conf 中。
【解决方案2】:

使用type 方法将本地系统上文件的路径输入到输入中。 Intern 会将文件上传到远程系统,然后在远程浏览器的文件输入中选择新上传的文件。

return remote
    .findElementById('file-input')
    .type('/tmp/somefile.txt') <-- Path on the local system

【讨论】:

  • 这就是它现在的写法,它在本地工作。但它在 Browserstack 中不起作用,它不会将任何内容上传到远程系统它只是返回“找不到文件”错误,因为远程系统无权访问我的本地文件系统。
  • 所以,我的问题和这个问题一样:stackoverflow.com/questions/37217884/…。我按照你在那儿说的做了,但它仍然不适用于 Firefox 和 Chrome。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 2013-07-16
  • 2019-03-13
  • 2018-04-14
  • 1970-01-01
相关资源
最近更新 更多