【发布时间】:2015-10-09 19:00:12
【问题描述】:
我还是 Selenium WD 的新手,并且通常执行远程黑盒测试。我正在尝试将电子邮件和密码值输入到各自的字段中以登录我的页面。我可以从家里导航到登录页面。但是,无论我用多少种方式编写它,控制台都会返回一个失败的测试和一个错误,说“找不到元素”。这是登录表格:
<div class="panel panel-default">
<div class="panel-body">
<h1>Log in</h1>
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="field">
<div class="form-field_2">
<%= f.label :email %> : </div>
<div style="width: 50%; float: left; padding: 5px" id="email">
<%= f.email_field :email, autofocus: true %>
</div>
</div>
<br/>
<br/>
<div class="field">
<div class='form-field_2'>
<%= f.label :password %> : </div>
<div style="width: 50%; float: left; padding: 5px" id="password">
<%= f.password_field :password, autocomplete: "off"%>
</div>
</div>
<br/>
<br/>
<% if devise_mapping.rememberable? -%>
<div class="field">
<%= f.check_box :remember_me %>
<%= f.label :remember_me %>
</div>
<% end %>
<br/>
<div class="actions">
<div id="signin" style="text-align: center;">
<%= f.submit "Log in", class: "btn btn-danger", id: 'submit' %>
</div>
</div>
<% end %>
<br/>
<%= render "devise/shared/links" %>
</div>
</div>
我的规格:
require './spec/spec_helper'
require 'selenium-webdriver'
feature "Signing in to ArtWare" do
before(:all) do
@driver = Selenium::WebDriver.for(:chrome)
end
it 'should let user in with a valid account and password' do
@driver.navigate.to 'https://artwear.herokuapp.com/'
@driver.find_element(:id, "signin").click
fill_in "user[email]", with: "email@provider.com"
fill_in "user[password]", with: 'asdfasdf'
@driver.find_element(:id, "submit").click
expect(page).to have_content('Signed in successfully.')
end
it 'should let me logout' do
@driver.find_element(:id, "logout").click
expect(page).to have_content('Signed out successfully.')
end
it 'should not let use in with an invalid account' do
@driver.find_element(:id, "signin").click
@driver.find_element(:id, 'user[email]').set('invalid@ainvalid.com')
@driver.find_element(:id, "user[password]").set('asdfasdf')
@driver.find_element(:id, "submit").click
expect(page).to have_content("Invalid email or password")
end
it 'should not let user in with an invalid password' do
@driver.navigate.to 'https://artwear.herokuapp.com/'
@driver.find_element(:id, "logout").click
@driver.find_element(:id, "signin").click
@driver.find_element(:id, 'user[email]').set("email@provider.com")
@driver.find_element(:id, "password").set('incorrect')
@driver.find_element(:id, "signin").click
expect(page).to have_content("Invalid email or password")
end
after(:all) do
@driver.quit
end
spec_helper:
require 'capybara/rspec'
require 'rubygems'
require 'bundler/setup'
Capybara.default_driver = :selenium
Capybara.app_host = 'http://artwear.herokuapp.com/'
Capybara.run_server = false
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
和 Gemfile
source 'http://rubygems.org'
gem 'rake'
gem 'rspec', '~> 3.3.0'
gem 'capybara', '~> 2.5.0'
gem 'selenium-webdriver', '2.47.1'
gem 'faker', '~> 1.5.0'
这是我在 Google DevTools 中为电子邮件标签获得的输出:
<input autofocus="autofocus" type="email" value="" name="user[email]" id="user_email">
我已尝试将 selenium 调用更改为:
fill_in "user_email", with: "email@provider.com"
fill_in 'user[email]', with: "email@provider.com"
fill_in :user_email, with: "email@provider.com"
@driver.find_element(:name, "user[email]").send_keys "email@provider.com"
@driver.find_element(:name, "user[email]").set("email@provider.com")
@driver.find_element(:id, 'user_email').set("email@provider.com")
所有这些都返回相同的错误:
失败/错误:填写“user[email]”,使用:“email@provider.com” 水豚::ElementNotFound: 找不到字段“用户 [电子邮件]” 或者: 失败/错误:@driver.find_element(:id, 'user[email]').set("email@provider.com") Selenium::WebDriver::Error::NoSuchElementError: 没有这样的元素
有人能告诉我我错过了什么吗?我想我几乎浏览了我在所有 Stackoverflow 帖子中找到的每个版本。提前谢谢你。
【问题讨论】:
标签: ruby-on-rails ruby selenium selenium-webdriver rspec