使用selenium将文件附加到knockout.js创建的文件字段

时间:2017-02-01 18:57:18

标签: ruby selenium knockout.js capybara

通常,附加文件相对简单

如果我有一个看起来像这样的元素;

<input 
id="DataFile_123" 
type="file">

我可以写这个

find(:xpath, 'input[@id="Data_123"]').send_keys('c:\file_dir\file.txt')

使用knockout.js我看到的文件类型如此...

<input 
type="file" 
data-bind="value: fileName, 
event: { change: handleFileChange }" 
accept=".csv">

我从AlexZeitler http://jsfiddle.net/AlexZeitler/fPWFd/

中找到了确切文件类型的摘要

尝试查找此输入会产生与以下相同的错误

当我用类似的硒代码追踪这样的东西时,我被阻止

 find(:xpath, 'input[@type="file"]').send_keys('c:\file_dir\file.txt')  #ElementNotFound

执行脚本周围的语法糖会引发我的注意。

execute_script('handleFileChange.js') # returns handleFileChange is not defined

有人在淘汰赛中附加文件有好运吗?让我知道。

1 个答案:

答案 0 :(得分:1)

通常隐藏文件输入字段以允许更好的样式。有许多方法可以隐藏字段并且没有看到CSS正在应用它是不可能100%确定的方法来修复它,但是如果你使用最新版本的Capybara并且页面上只有一个文件输入你可以尝试

attach_file('c:\file_dir\file.txt', make_visible: true)

那将尝试找到不可见的文件元素,修改元素CSS以使其可见,附加文件,然后将CSS恢复到原来的状态。如果页面上有多个文件输入元素,您仍然可以通过作用于仅包含一个页面的可见区域来使用它。