首页 > 解决方案 > 我正在尝试使用 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

这是我得到的错误。在此处输入图像描述

标签: seleniumrubygemsautomated-testscapybaraqa

解决方案


首先,您不应该尝试填写隐藏字段,您应该像用户一样与可见元素进行交互。在这种情况下,这可能意味着需要先单击另一个元素才能触发电子邮件输入变为活动状态。就像是

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 驱动程序进行此测试,正如问题标签所暗示的那样。


推荐阅读