2017-10-05 1 views
1

Dans mon test, j'essaye de frapper etsy.com, faire une recherche, cliquer sur un résultat, et ajouter l'article à mon panier. Je suis capable de tout faire jusqu'à ce que j'essaie de cliquer sur le bouton 'ajouter au panier'. Le code ci-dessous fonctionne réellement dans la CISR, donc je sais que mon localisateur est solide, mais quand je lance le test, je reçois un élément est cliquables au point erreurL'élément n'est pas cliquable erreur Ruby/Watir

C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/selenium-webdriver-3.6.0/lib/selenium/webdriver/remote/response.rb:71:in 'assert_ok': unknown error: Element is not clickable at point (930, 586) (Selenium::WebDriver::Error::UnknownError) (Session info: chrome=61.0.3163.100)

Voici mon test

require 'watir' 

# test that a user can search for and add an item to shopping cart 
b = Watir::Browser.new :chrome 

begin 
    b.goto "http://etsy.com" 
    b.text_field(:id => 'search-query').set 'bacon is my spirit animal coaster' 
    b.button(:value => 'Search').present? 
    b.button(:value => 'Search').click 
    b.p(:text => /Bacon Spirit Animal Coaster/).click 
    b.select_list(:id => 'inventory-variation-select-0').option(:text => 'Single ($8.00)').select 
    b.button(:text => /Add to cart/).click 

    if b.text.include?("item in your cart") 
    puts "Test passed!" 
    else 
    puts "Test failed!" 
    end 

ensure 
    b.close 
end 

Et voici la page HTML pour le bouton.

<button class="btn-transaction" type="submit"> 
      <div class="btn-text">Add to cart</div> 
      <div class="ui-toolkit"> 
       <div class="btn-spinner spinner spinner-small display-none"></div> 
      </div> 
     </button> 

Répondre

4

En fonction de la largeur du navigateur (et probablement d'autres facteurs), des boîtes de dialogue flottent sur le bouton Ajouter au panier. Par exemple, lorsque le test a échoué pour moi, il y avait une boîte de dialogue de démarrage en haut du bouton. Chrome tente de cliquer sur un emplacement. Si un autre élément se trouve au-dessus de votre élément à cet emplacement, Chrome lève l'exception.

enter image description here

La solution la plus simple est de contourner la vérification de Chrome en déclenchant directement l'événement click:

# Watir > 6.8.0: 
b.button(:text => /Add to cart/).click! # note the exclamation mark 

# Watir < 6.8.0: 
b.button(:text => /Add to cart/).fire_event(:onclick) 

D'autres solutions qui peuvent conditionnellement travailler:

  • Maximisez le navigateur avant de cliquer sur le bouton - browser.window.maximize. Cela peut éloigner l'élément flottant du bouton.
  • Ferme le dialogue flottant.
+2

Non seulement avez-vous pris le temps de m'aider avec la réponse, mais vous avez également expliqué pourquoi - vraiment génial. Je l'apprécie grandement - merci! – Jen