【问题标题】:Can I get attach_file to work without an ID or class name?我可以在没有 ID 或类名的情况下让 attach_file 工作吗?
【发布时间】:2017-03-28 20:49:17
【问题描述】:

标记看起来完全像这样:

<input type="file">

有什么方法可以让attach_file 使用它吗?

与此同时,我已经要求开发人员为我添加一个 ID,但我尽量避免任何特殊要求。

【问题讨论】:

  • 您要 XPath 吗?我不清楚你在问什么。
  • 据我所知,attach_file在使用时需要一个ID。像attach_file('input[type="file"], 'file.txt') 这样的操作是行不通的。我在问是否有办法将 attach_file 与我提供的给定标记一起使用。
  • 我已经要求我们的开发人员更新标记,使其看起来像 <input type="file" id="upload">,并且在使用 upload 作为 id 时效果很好。我想避免要求开发人员进行更改以适应我的规范,因此很高兴知道我是否可以像以前的标记方式一样使用 attach_file。

标签: selenium rspec capybara


【解决方案1】:

Capybara 的#attach_field 基本上归结为find(:file_field, locator, options).set(path),它将通过id、名称或相关的标签文本来查找。但是,如果您以另一种方式找到该元素,则可以使用路径在其上调用 #set。另一件需要注意的事情是(使用最新版本的 Capybara)如果您在页面上只有一个文件字段,或者您的范围仅限于只有一个文件字段的页面区域,您可以将 nil 作为定位器传递它只会找到任何类型为“文件”的输入。

所以

attach_file(nil, 'test.txt')

等价于

find('input[type="file"]').set('text.txt')

除了 set 的示例将跳过 Capybara 对文件的存在性测试

【讨论】:

  • @Phil FYI 如果只有一个匹配元素,您可以将 nil(或仅省略定位器)传递给大多数特定选择器(:field、:checkbox、:radio_button 等)和操作在当前范围内。 attach_file 方法是当前需要 nil 的一种用途,但在 Capybara 的下一版本中可能会取消该要求。
  • 谢谢,汤姆,我会记住的。很高兴了解具体的选择器。
猜你喜欢
  • 1970-01-01
  • 2019-01-14
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2019-03-27
  • 2017-07-23
相关资源
最近更新 更多