我正在一个已经完成的项目中执行我的 hello world 测试应用程序,并且遇到了一些情况,并对我所看到的情况感到困惑。
Capybara
Cucumber
Javascript
以cucumber features/#{feature_name}.feature
运行黄瓜测试时,并且考虑到我在特定页面上。我可以通过CSS ID
找到元素,但无法点击它们。
When(/^I log in with email "(.*?)" and password "(.*?)"$/) do |email, password|
step %{I am on login page}
expect(page).to have_css('#login-form')
expect(page).to have_css('#login-button')
within("#login-form") do
fill_in '#username', with: email
fill_in '#password', with: password
click_button 'dfalkjsdfalsdkfja dflkjasdf alkdsjfasd lfkjsf s' # Which should fail, but odesn't :'(
end
click_button 'Sign In'
# click_button '#login-button' # This fails
end
即使我对#login-form
使用完全随机的不存在ID,也会通过以下测试。正如你所看到的,我有一个带有一些愚蠢文本的按钮。如果我把它作为ID,没有区别。测试通过了。
但是当我在没有内部块的情况下单独使用它们时,找不到元素。
但在上方,您会看到expect(page).to
语句找到它们。
以上是与我在Capybara
repo。
CSS selectors
来定位前:#login-form
within
块中的非现有选择器是否会失败?我的情况没有。fill_in '#password', with: 'password'
这样的东西在上面的断言好像找不到的时候会说找不到元素?忘记询问,考虑到回购中的示例,以下fill_in
块中的“电子邮件”是什么。似乎不是元素的id。
fill_in 'Email', :with => 'user@example.com'
经过一些游戏,我发现以下工作(找到元素并填充/点击它)。但是within
块没有填写表单。在解释时,任何配置都可以影响within
块。
When(/^I log in with email "(.*?)" and password "(.*?)"$/) do |email, password|
step %{I am on login page}
find('form#login-form').find('input#username').set email
find('form#login-form').find('input#password').set password
find('form#login-form').find('#login').click
within("form#login-form") do
fill_in 'input#username', with: email
fill_in 'input#password', with: password
click_button '#login'
end
end