水豚 returns 附加文件时出现参数错误
Capybara returns Argument error when attach the file
我正在研究浏览器自动化并尝试使用 Capybara 软件附加文件。通过单击我的脚本应该开始上传文件,我有一个按钮。
它已经在同一个网站的一个地方为我工作,所以我正在尝试再次实施它。
我的做法:
$private_key_path = '/Users/user1/Desktop/my_file.zip'
upload_generated_zip_btn = browser.all(:element, 'material-button', text: 'Upload generated ZIP')
browser.attach_file($private_key_path) do
upload_generated_zip_btn[0].click
end
但实际上我的脚本只是点击按钮,然后出现弹出窗口,我可以在其中手动选择文件。几秒钟后脚本失败并出现以下错误:
ArgumentError: Capybara was unable to determine the file input you're attaching to
我查看了文档和原始代码,但不明白这个问题。手动上传相同的文件是可行的。试图更改定位器 - 没有结果。
按钮代码截图:
源代码:
当使用 attach_file 的块版本时,Capybara 会附加一个用于点击 <input type="file">
元素的侦听器,并使用它来确定要将文件附加到哪个输入。因为它没有找到它,所以它没有触发点击,或者您的代码结构方式隐藏了 Capybara 的点击。首先我会问你为什么使用 all
和 element
选择器类型来查找按钮而不是建议(假设浏览器是 Capybara 会话??)
browser.attach_file($private_key_path) do
browser.find('material-button', text: 'Upload generated ZIP').click
end
很难说这是否正确,因为您实际上并没有在您的问题中为带有该文本的按钮显示 HTML。如果这仍然不起作用,那么您将需要实际定位文件输入元素并使用 attach_file 的非块版本。像
attach_file($private_key_path, make_visible: true)
或者自己先找到文件输入
browser.find('input[type="file"]', visible: false).attach_file($private_key_path, make_visible: true)
同样很难确定,因为您的 HTML 似乎并未实际显示您尝试点击的按钮。
水豚不与不可见元素互动。因此,尝试删除隐藏属性并使文件选择可见
试试这个:
selector = {Selector} # selector for material button
Capybara.current_session.execute_script("document.querySelector('#{selector}').removeAttribute('hidden')")
expect(page).to have_content(file_upload", visible: true)
page.attach_file(
find('material-button', text: 'Upload generated ZIP'),
Rails.root.join($private_key_path)
我正在研究浏览器自动化并尝试使用 Capybara 软件附加文件。通过单击我的脚本应该开始上传文件,我有一个按钮。 它已经在同一个网站的一个地方为我工作,所以我正在尝试再次实施它。
我的做法:
$private_key_path = '/Users/user1/Desktop/my_file.zip'
upload_generated_zip_btn = browser.all(:element, 'material-button', text: 'Upload generated ZIP')
browser.attach_file($private_key_path) do
upload_generated_zip_btn[0].click
end
但实际上我的脚本只是点击按钮,然后出现弹出窗口,我可以在其中手动选择文件。几秒钟后脚本失败并出现以下错误:
ArgumentError: Capybara was unable to determine the file input you're attaching to
我查看了文档和原始代码,但不明白这个问题。手动上传相同的文件是可行的。试图更改定位器 - 没有结果。
按钮代码截图:
源代码:
当使用 attach_file 的块版本时,Capybara 会附加一个用于点击 <input type="file">
元素的侦听器,并使用它来确定要将文件附加到哪个输入。因为它没有找到它,所以它没有触发点击,或者您的代码结构方式隐藏了 Capybara 的点击。首先我会问你为什么使用 all
和 element
选择器类型来查找按钮而不是建议(假设浏览器是 Capybara 会话??)
browser.attach_file($private_key_path) do
browser.find('material-button', text: 'Upload generated ZIP').click
end
很难说这是否正确,因为您实际上并没有在您的问题中为带有该文本的按钮显示 HTML。如果这仍然不起作用,那么您将需要实际定位文件输入元素并使用 attach_file 的非块版本。像
attach_file($private_key_path, make_visible: true)
或者自己先找到文件输入
browser.find('input[type="file"]', visible: false).attach_file($private_key_path, make_visible: true)
同样很难确定,因为您的 HTML 似乎并未实际显示您尝试点击的按钮。
水豚不与不可见元素互动。因此,尝试删除隐藏属性并使文件选择可见 试试这个:
selector = {Selector} # selector for material button
Capybara.current_session.execute_script("document.querySelector('#{selector}').removeAttribute('hidden')")
expect(page).to have_content(file_upload", visible: true)
page.attach_file(
find('material-button', text: 'Upload generated ZIP'),
Rails.root.join($private_key_path)