selenium - 我正在尝试使用 Capybara 找到一个不可见的字段来填写,但我所做的一切似乎都不起作用
问题描述
我目前正在尝试使用 Capybara 填写 Google 登录表单,但我很难找到要填写的隐藏字段。
这是我要填写的字段的 HTML。
这是测试代码
require "rails_helper.rb"
RSpec.describe "Sign in page" do
it 'displays the page intention' do
visit('/mars')
expect(page).to have_content 'Sign in with Google'
end
it 'fills in user information' do
find(:xpath, '//*[@id="identifierId"]', visible: false)
end
end
解决方案
首先,您不应该尝试填写隐藏字段,您应该像用户一样与可见元素进行交互。在这种情况下,这可能意味着需要先单击另一个元素才能触发电子邮件输入变为活动状态。就像是
first('form div[jscontroller]').click
fill_in('identifierId', with: email)
应该适用于谷歌登录页面。
注意:你也应该尽可能使用 CSS 而不是 XPath 来查找元素,因为它会更快、更容易阅读,并且不会无意中破坏元素范围(//
与.//
XPath 相比 - 请参阅https://github.com/teamcapybara/水豚#beware-the-xpath--trap )
更新:此外,所有it
块都是完全独立的,中间有一个浏览器重置,因此您需要访问每个块的所需页面(如果所有it
块都describe
需要访问同一页面,您可以将访问放在一个before
块中。
注意:这一切都假设您实际使用 Selenium 驱动程序进行此测试,正如问题标签所暗示的那样。
推荐阅读
- google-cloud-storage - 负载均衡器为静态网站(存储桶)提供 404
- r - 如何在 for 循环中收集值?
- javascript - 如何在图像删除时在 dropzone 中传递 id?
- python - 如何使用 VS Code 检测 DJango/Docker 项目中未使用的 python 包?
- makefile - makefile 目标比先决条件更新,但会重新完成
- javascript - 在 Razor 页面上显示 Javasciprt 文件的数据
- android-jetpack-compose - 使用 Dialog 作为导航目的地与 jetpack compose
- sql - 对从内部查询获得的每个日期执行外部查询
- javascript - TypeError:无法设置未定义的属性“数据”
- python - 无法获取变量的值