1

Gem unter file: Rails/Reagieren app - Capybara-Selen :: WebDriver :: Fehler nicht anklickbar an Punkt ist, würde ein anderes Element erhalten klicken:

group :development, :test do 
 
    gem 'rspec-rails' 
 
    gem 'capybara-selenium' 
 
    gem "chromedriver-helper" 
 
end

Ich teste Rails-Anwendung mit Reaktionsanzeige. Der Test geht durch die Bewegungen, aber wenn es zum Klicken auf den Knopf kommt, klickt er irgendwo anders.

rails_helper.rb

# This file is copied to spec/ when you run 'rails generate rspec:install' 
 
ENV['RAILS_ENV'] ||= 'test' 
 
require File.expand_path('../../config/environment', __FILE__) 
 

 
# Prevent database truncation if the environment is production 
 
abort("The Rails environment is running in production mode!") if Rails.env.production? 
 
require 'spec_helper' 
 
require 'capybara/rspec' 
 
require 'selenium/webdriver' 
 
require 'chromedriver/helper' 
 

 

 
Capybara.default_max_wait_time = 5 
 

 

 
Capybara.javascript_driver = :selenium_chrome 
 

 
RSpec.configure do |config| 
 
    config.raise_errors_for_deprecations! 
 

 
end

test_spec.rb

require 'rails_helper' 
 

 

 
feature "Select a Work Station" do 
 
    scenario "User should select a embedding work station" , js: true do 
 

 
    # 1- Go to login screen and authenticate 
 
\t visit "http://localhost:3001" 
 
\t \t fill_in('Email', :with => 'xxx') 
 
\t \t fill_in('Password', :with => 'xxxx') 
 
\t \t click_button("Submit") 
 
    # save_and_open_screenshot 
 

 
    # 2- Select an account 
 
    find('tr[accountname="Clinical Pathology Laboratories"]').click 
 
    # save_and_open_screenshot 
 

 
    # 3- Use default location 
 
\t \t click_button("Save") 
 
    # save_and_open_screenshot 
 

 
    # 4- Click on the Embedding button 
 
    find('img[alt="Embedding"]').click 
 

 
    # 5- Start Session 
 
    find('#work_station_id').find('option', text: "Embedding #1").select_option 
 

 
    # ------------ clicking action ------ 
 
    # page.driver.browser.action.move_to(find('button', text: "Start Session")).move_by(0, 5) 
 
    # expect(page).to have_select('#work_station_id') 
 
    # select 'Embedding #1', :from => '#work_station_id' 
 
    # page.driver.browser.mouse.move_to(find('button', text: "Start Session"), 0, 5) 
 
    # find('button[class="btn btn-success"]').click 
 
    # page.click_link_or_button('Start Session') 
 
    # click_button("Start Session") 
 
    end 
 
end

Das Problem beginnt # ------------ Klick Aktion ------ und unten, wo ich versuche auf den Knopf zu klicken, aber wo ich erwarte, dass es mich bewegt, fo reite zur nächsten Seite. Ich habe versucht, auf die "Start Session" -Schaltfläche auf viele verschiedene Arten zu klicken. Stattdessen erhalte ich diese Taste an dem Punkt nicht anklickbar ist ect ...

Failure/Error: page.click_link_or_button('Start Session') 
 
     
 
    Selenium::WebDriver::Error::UnknownError: 
 
     unknown error: Element <button type="submit" class="btn btn-success" data-target="#undefined">...</button> is not clickable at point (628, 358). Other element would receive the click: <div class="wrapper wrapper-content animated fadeInRight">...</div> 
 
     (Session info: chrome=60.0.3112.101) 
 
     (Driver info: chromedriver=2.31.488774 (7e15618d1bf16df8bf0ecf2914ed1964a387ba0b),platform=Mac OS X 10.12.6 x86_64)

Antwort

1

Das Problem ist, die Sie haben, dass Sie ein anderes Element haben (< div class = "Wrapper wrapper- Inhalt animiert fadeInRight "> ... </div>) über die Schaltfläche, die Sie klicken möchten. Sie müssen herausfinden, warum es da ist und dann alle erforderlichen Aktionen ausführen, um die Schaltfläche verfügbar zu machen. Dies kann beinhalten, die Seite zu scrollen, die Bildschirmgröße größer zu machen, damit sich die Dinge nicht überschneiden, das anstößige Element schließt (wenn es ein Modal ist, usw.).

Zusätzlich verwenden Sie Selen-Aktionsmethoden, aber übergeben Capybara-Elemente an sie und führen die Aktionen nicht aus.

Wenn Sie diese Methoden aufrufen möchten, müssen Sie native auf den Capybara Elemente nennen, die Selen nativen Element Verweis zu erhalten und am Ende Ihrer Aktionskette führen rufen, um tatsächlich es etwas behelfen.

page.driver.browser.action.move_to(find('button', text: "Start Session").native).move_by(0, 5).perform 
Verwandte Themen