首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能用Selenium Webdriver和Rspec在输入字段上写入

不能用Selenium Webdriver和Rspec在输入字段上写入
EN

Stack Overflow用户
提问于 2015-10-09 19:00:12
回答 3查看 1.1K关注 0票数 1

我对Selenium还是个新手,一般都在执行远程黑盒测试。我正在尝试将电子邮件和密码值输入到他们各自的字段中,以便登录到我的页面。我可以从家里导航到页面中的标志。然而,不管我写它的方式有多少种,控制台都会返回一个失败的测试和一个错误,上面写着‘找不到元素’。这是签注表格:

代码语言:javascript
运行
复制
<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">&nbsp;&nbsp;
               <%= f.label :email %>&nbsp;:&nbsp;&nbsp;</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'>&nbsp;&nbsp;
               <%= f.label :password %>&nbsp;:&nbsp;&nbsp;</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>

我的规格:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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中获得的电子邮件标签的输出:

代码语言:javascript
运行
复制
<input autofocus="autofocus" type="email" value="" name="user[email]" id="user_email">

我尝试将selenium调用更改为:

代码语言:javascript
运行
复制
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文章中找到的几乎每一个版本。提前谢谢你。

EN

Stack Overflow用户

发布于 2015-10-09 19:12:15

我猜这是个老问题,凯巴拉是用元素id而不是名字来搜索的。

如果是这样的话,您需要确保输入的id是缺少的(只需检查HTML或视图源来验证)。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33045394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档