Webdriver-fout: element kan niet worden geklikt op het punt (-99999800, 242.5) om Facebox-bediening via watir-webdriver aan te sturen

Ik gebruik watir-webdriver met chrome om mijn tests te automatiseren en ik zit nu een beetje vast. Ik heb een formulier in een facebox (defunkt.io/facebox). Er zijn veel selectievakjes in dit formulier zoals je kunt zien:

irb(main):113:0> b.checkboxes.size
=> 122

Mijn probleem is wanneer ik een van deze selectievakjes probeer in te stellen, krijg ik de volgende foutmelding:

irb(main):111:0> b.checkbox(:id => 'week_0').set 1
Selenium::WebDriver::Error::UnknownError: Element is not clickable at point (-99999800, 242.5)
Backtrace:
    0x8088d3a
    0x8076225
    0x807c718
    0x807c9e7
    0x807f6b7
    0x808009d
    0x8067c5c
    0x8074931
    0x8059fda
    0x80d1d4d
    0x80d3773
    0x80d3aa3
    start_thread [0x5e9e99]
    0x10b973e

from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/response.rb:50:in `assert_ok'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:58:in `new'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:58:in `create_response'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/default.rb:64:in `request'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/http/common.rb:39:in `call'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:450:in `raw_execute'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:428:in `execute'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/remote/bridge.rb:264:in `clickElement'
from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.14.0/lib/selenium/webdriver/common/element.rb:34:in `click'
from /usr/local/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.3.9/lib/watir-webdriver/elements/checkbox.rb:25:in `set'
from (irb):111
from /usr/local/bin/irb:12:in `
'

Wat moet ik doen om de facebox met watir-webdriver op chrome te gebruiken?

BEWERK:

Ik vond het probleem met een TIP van Chuck (kijk elementenattribuut bij het inspecteren van elemententool). Dus ik zag dat de selectievakjes -999999px links stonden.

Oplossing:

browser.execute_script("$('[type=checkbox]').removeClass('ui-helper-hidden-accessible')")

(omdat dit de klasse was die de linkse negatieve verschuiving veroorzaakte)

1
Toon ons de HTML-code die de fout veroorzaakt. Beter nog, link naar de pagina.
toegevoegd de auteur Željko Filipin, de bron
Welke facebox? de mootools [ bertramakers.com/moolabs/facebox.php]bas één? de defunkt j-query [ defunkt.io/facebox/] één? De lightbox-tool van DynamicDrive [ dynamicdrive.com/dynamicindex4/facebox/index.htm]
toegevoegd de auteur Chuck van der Linden, de bron
Het andere om te controleren is dat er niet meer dan een van deze dingen is en misschien vindt u er slechts een die buiten het scherm valt. op het moment dat dit ding op het scherm staat, van IRB naar welke waarde krijg je terug voor b.checkboxes (: id => 'week_0').
toegevoegd de auteur Chuck van der Linden, de bron
Kun je de ontwikkelaarstools gebruiken (klik erop met de rechtermuisknop en selecteer 'element inspecteren' in chrome) en bepaal wat de eigenschappen van het element zijn? specifiek denk ik aan zaken als positie, links, boven, display, etc.
toegevoegd de auteur Chuck van der Linden, de bron
Dit is echt een fout van een webdriver, dus een bijgewerkte titel om dat wat duidelijker te maken en misschien wat inbreng van sommige webdriver-experts te krijgen.
toegevoegd de auteur Chuck van der Linden, de bron
Hallo, ik heb de kenmerken gecontroleerd en het linkereigenschap is -99999999px het is zichtbaar maar buiten het scherm en ik vermoed dat dit de fout veroorzaakt
toegevoegd de auteur Lucas Castro, de bron
het is defunkt.io/facebox ziek proberen om een ​​online versie te bieden, zodat u het echte voorbeeld kunt zien
toegevoegd de auteur Lucas Castro, de bron

3 antwoord

Ik vond het probleem met een TIP van Chuck (kijk elementenattribuut bij het inspecteren van elemententool). Dus ik zag dat de selectievakjes -999999px links stonden.

Oplossing:

browser.execute_script("$('[type=checkbox]').removeClass('ui-helper-hidden-accessible')")

(omdat dit de klasse was die de linkse negatieve verschuiving veroorzaakte)

1
toegevoegd

De fout doet me denken dat het ding op de een of andere manier misschien niet zichtbaar of actief is. Geeft het script de lightbox daadwerkelijk weer op het moment dat het probeert ermee te werken? Moet je een korte pauze invoegen of wachten tot het selectievakje wordt weergegeven en de JavaScript-code die de lichtbak 'opduikt' om het ding te voltooien?

Als het niet zichtbaar is, kan ik zien dat het een fout veroorzaakt die je krijgt. Ook als het script net iets te snel gaat, kan dat ook het probleem zijn.

Gebruik de ontwikkelaarstools (in chrome kunt u met de rechtermuisknop op een element klikken en 'element inspecteren' kiezen) en de eigenschappen (met name positie) van het element in kwestie bekijken, en de elementen verderop (als het ware) in de 'boom' staan bevatten.

Je zou hier mogelijk bruut geweld van kunnen maken door de klasse te veranderen, of de CSS voor de klas te wijzigen om het object tijdelijk te 'verplaatsen' zodat Watir gelooft dat het zichtbaar is. Ik heb iets soortgelijks moeten doen voor dingen die de hover-status gebruikten om menu's te verbergen of te tonen, waar om welke reden dan ook 'onmouseover'-events niet goed genoeg waren voor de browser om een ​​andere css-psallengroep toe te passen. Als u al jQuery gebruikt, zijn er enkele vrij eenvoudige functies die u kunt gebruiken om dat soort dingen te doen. (een van je ontwikkelaars kan je er misschien mee helpen) Je kunt .execute_script gebruiken om zo'n code op te roepen als dat nodig is.

0
toegevoegd
Hmmm er moet een truc zijn van 'relatieve' locatie die daar gaande is ... interessant. Een deel van mij vraagt ​​zich af of dit een fout is in hoe de zichtbaarheid van een object wordt berekend. MAN Ik wou dat ik kon zien en spelen met deze pagina om erachter te komen wat er aan de hand is. Als dit een watir- of webdriver-probleem is, zou ik het graag opgelost zien.
toegevoegd de auteur Chuck van der Linden, de bron
tenzij iets glazig traag is, sluit dat over het algemeen uit dat dit een kwestie van timing is
toegevoegd de auteur Chuck van der Linden, de bron
als je een regel tegelijk invoert, dan is dat waarschijnlijk. Als je meerdere lijnen aan het knippen en plakken bent, misschien ook niet. Ik denk dat we een inbreng van iemand die het lef kent (en de werkelijke betekenis van de fouten) van webdriver beter nodig hebben dan ik om die fout te begrijpen.
toegevoegd de auteur Chuck van der Linden, de bron
de dead givaway van een timing probleem is meestal als het van IRB gaat werken als je spul een regel per keer invoert, maar niet als het wordt uitgevoerd vanuit een script. Dat is het moment waarop u het script mogelijk moet laten wachten totdat een element zich in een specifieke staat bevindt, zoals zichtbaar. De coördinaten in de fout doen me afvragen of het zich 'buiten het scherm' bevindt, wat een algemene tactiek is om dingen te 'verbergen' als je de eigenschap 'display' niet wilt gebruiken.
toegevoegd de auteur Chuck van der Linden, de bron
dit is de tool die gebruikt: defunkt.io/facebox
toegevoegd de auteur Lucas Castro, de bron
ik zal het proberen, maar de uitzondering was nogal duidelijk over "Element kan niet worden aangeklikt op punt (-99999800, 242.5)"
toegevoegd de auteur Lucas Castro, de bron
bedankt voor het proberen om me te helpen! echt, ik heb ook geprobeerd click_no_wait te gebruiken, maar het werkt niet op webdrive ... Ik zal ook proberen te pauzeren.
toegevoegd de auteur Lucas Castro, de bron
Ik gebruikte IRB om te testen. Misschien hebt u gelijk en kunnen we timingproblemen weggooien
toegevoegd de auteur Lucas Castro, de bron
ik voer regel voor regel in
toegevoegd de auteur Lucas Castro, de bron
Hallo Chuck, de 'developer tools'-tip heeft me veel geholpen. Ik loste mijn probleem op, toen ik de klasse verwijderde die het element -9999999px naar links verschoof, kon ik erop klikken. Zou je alsjeblieft je antwoord kunnen bijwerken, dus ik stem erop? -
toegevoegd de auteur Lucas Castro, de bron

Probeer dit. Het verplaatst het element in beeld met Javascript. Werkte voor mij.

module Watir
  class Element
    def move_into_view
      browser.execute_script(%Q[
        var element = arguments[0];
        element.style.position = 'absolute';
        element.style.left = '10px';
        element.style.top = '10px';
        return true;],
        self )
    end
  end
end
0
toegevoegd