我对Selenium还是个新手,一般都在执行远程黑盒测试。我正在尝试将电子邮件和密码值输入到他们各自的字段中,以便登录到我的页面。我可以从家里导航到页面中的标志。然而,不管我写它的方式有多少种,控制台都会返回一个失败的测试和一个错误,上面写着‘找不到元素’。这是签注表格:
<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")
所有这些都返回相同的错误:
Failure/Error: fill_in "useremail",带有:"email@provider.com“Capybara::ElementNotFound:无法找到字段"useremail”或: Failure/Error:@driver.find_element(:id,'useremail').set("email@provider.com")没有这样的元素
有人能告诉我我错过了什么吗?我想我已经浏览了我在所有Stackoverflow文章中找到的几乎每一个版本。提前谢谢你。
发布于 2015-10-09 19:12:15
我猜这是个老问题,凯巴拉是用元素id而不是名字来搜索的。
如果是这样的话,您需要确保输入的id是缺少的(只需检查HTML或视图源来验证)。
https://stackoverflow.com/questions/33045394
复制相似问题