1

fichier Gem ci-dessous: Rails/React app - Capybara-Sélénium :: WebDriver :: erreur est pas cliquable au point, Autre élément recevraient le clic:

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

Je teste l'application des rails avec vue de réaction. Le test passe par les mouvements, mais quand il s'agit de cliquer sur le bouton, il clique ailleurs.

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

Le problème commence # ------------ cliquant action ------ et ci-dessous où j'essaie de cliquer sur le bouton, mais où je m'attends à ce qu'il me bouge Aller à la page suivante.J'ai essayé de cliquer sur le bouton «Démarrer la session» de nombreuses façons différentes. Au lieu de cela, je reçois ce bouton est pas cliquable au point 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)

Répondre

1

Le problème que vous rencontrez est que vous avez un autre élément (< div class = "wrapper wrapper- contenu animé fadeInRight "> ... </div>) sur le bouton que vous essayez de cliquer. Vous aurez besoin de comprendre pourquoi il est là et ensuite effectuer toutes les actions nécessaires pour rendre le bouton disponible. Cela peut inclure, faire défiler la page, agrandir la taille de l'écran afin que les choses ne se chevauchent pas, en fermant l'élément incriminé (si c'est un modal, etc.).

De plus, vous utilisez des méthodes d'action au sélénium, mais en leur passant des éléments Capybara, sans effectuer les actions. Si vous souhaitez appeler ces méthodes, vous devez appeler native sur les éléments Capybara pour obtenir la référence d'élément natif sélénium et appelez effectuez à la fin de votre chaîne d'actions pour réellement faire quelque chose.

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