2016-07-19 16 views
2

Ich habe den folgenden Code auf der Seite:Wie Text in eine reagieren-selectize-Steuerung eingeben Watir mit

<div class="col-md-5 col-lg-3"> 
    <div class="react-selectize bootstrap3 root-node simple-select open"> 
    <div class="react-selectize-control"> 
    <div class="react-selectize-placeholder">testing!</div> 
    <div class="react-selectize-search-field-and-selected-values"> 
     <input class="resizable-input" style="width: 4px;" type="input"> 

Wenn ich das Eingabefeld physisch auswählen und dann den watir-classic folgenden ausgeführt werden:

BROWSER.div(:class => 'col-md-5 col-lg-3') 
     .div(:class => 'react-selectize-search-field-and-selected-values') 
     .text_field(:class => 'resizable-input') 
     .send_keys('Magg') 

wird es Magg in das Feld eingeben, aber wenn ich manuell das Feld nicht auswählen kann ich nicht scheinen, watir den Text einzugeben.

Ich habe versucht, die folgenden:

BROWSER.div(:class => 'col-md-5 col-lg-3') 
     .div(:class => 'react-selectize-search-field-and-selected-values') 
     .text_field(:class => 'resizable-input') 

mit

.set('Magg') 
.fire_event('onfocus') 
.fire_event('mousedown') 
.fire_event('mouseup') 

mit

.parent.text_field(:class => 'resizable-input') 
.parent.input(:class => 'resizable-input').set('Magg') 
.input(:class => 'resizable-input').set('Magg') 
.input(:class => 'resizable-input').send_keys('Magg') 

Ich habe mit dem Entwickler arbeiten, um die Steuerung mit und keiner von uns kann finde heraus, wie man den Steuerfokus so einstellt, dass der send_keys ohne manuelle s funktioniert Wählen der Kontrolle. Jede Anleitung würde sehr geschätzt werden.

+0

muss die Eingabe angeklickt werden um aktiv zu sein? macht etwas einfaches wie 'b.input (klasse:" resizable-input ") .set" foo "' funktionieren überhaupt? (wenn nicht, welchen Fehler bekommst du, wenn überhaupt). Müssen Sie den äußeren Container angeben, um die Eingabe auszuwählen? z.B. does 'puts b.inputs (Klasse:" resizable-input "). size' gibt einen anderen Wert als 1 zurück? –

+0

Danke Chuck Die Eingabe muss möglicherweise nicht geklickt werden, um aktiv zu sein, aber ich habe Probleme beim Versuch, sie über Watir zu aktivieren. Ja, gibt die Größe einen Wert von 2 Wenn ich .set verwenden ('Magg') ' ich: NoMethodError: nicht definierte Methode 'Set' für # von C:/Ruby193 /lib/ruby/gems/1.9.1/gems/watir-classic-4.3.0/lib/watir-classic/element.rb:314:in 'method_missing ' von (irb): 553 von C:/Ruby193/bin/irb: 12: in '

' Aber wenn ich .send_keys (' Magg ') verwende, bekomme ich => 1 –

+0

Gibt es mehrere Reaktiv-Selektiere Bibliotheken/Steuerelemente? Das [ein Beispiel] (http://furqanzafar.github.io/react-selectize/#/?category=simple&example=ediable-value), das ich ausprobiert habe, funktionierte gut mit 'send_keys'. –

Antwort

1

Zuerst - obligatorische Warnung, dass Watir Classic veraltet ist und Sie Watir WebDriver verwenden sollten. (was dieses Problem beheben kann)

Zweitens - technisch: div(:class => 'col-md-5 col-lg-3') sollte div(:css => '.col-md-5.col-lg-3') sein, da die Klasse singular sein sollte.

Haben Sie versucht, nur element.fire_event(:click) vor element.set zu tun?

+1

Vielen Dank für Ihr Feedback @ titsfortner. Ich hatte Probleme, WebDriver zur Arbeit zu bringen, also habe ich nur klassisch verwendet, um meinen Mitarbeitern die Wunder von Watir zu zeigen und was es tun kann. Kinda fiel flach auf mein Gesicht, als ich keinen Text in ein Feld eingeben konnte :(Ja, Entschuldigung, ich hätte das .fire_event ('click') als eine der Optionen, die wir ausprobiert haben, einbauen sollen, aber ach, es hat auch nicht funktioniert –

+2

Also habe ich WebDriver jetzt arbeiten und meine Mitarbeiter sind jetzt viel mehr beeindruckt, dass ich das funktioniert :) –

1

Beachten Sie, dass Ihr HTML einen ungültigen Typ-Wert für das Eingabe-Tag hat. Per W3.org ist der Typ von "Eingabe" keine gültige Typenwahl für ein Eingabe-Tag.

Das ist wahrscheinlich, was die Methode, von der Sie erwarten, dass sie funktioniert (wie .set), fehlschlägt. Es bedeutet auch, dass alle watir-Methoden, die spezifischere Untertypen von Eingaben zurückgeben (z. B. .text_field), nicht funktionieren, um dieses Tag auszuwählen.

Watir definiert die spezifischen eingabebezogenen Methoden (z. B. .set, .unset) gemäß dem spezifischen Untertyp des Eingabe-Tags und verfügt über Methoden zur Auswahl dieser spezifischen Eingabearten (z. B. .button). Normalerweise würden Sie ein Eingabe-Tag mit der Methode für seinen Untertyp auswählen, aber da dieser Wert nicht gültig ist, ist dies in diesem Fall keine Option, und Sie werden gezwungen, .input zu verwenden. Aber wie wir gerade besprochen haben, hat das Eingabeobjekt in watir keine Methoden wie .set definiert. Ihr einziger Fallback besteht also darin, mit .sendkeys Tastenanschläge an das Element zu senden.

Wenn ich ich wäre, würde ich einen Fehler in diesem HTML schreiben, dass es keinen richtigen Wert für "Typ" gemäß der W3-Spezifikation verwendet.

Das Korrigieren des HTML-Codes wird wahrscheinlich dazu führen, dass es mit Watir oder einem anderen Automatisierungswerkzeug, insbesondere auf der Basis von Webdriver, besser funktioniert.

+1

Toller Rat, danke @ChuckvanderLinden. Ich werde den Entwickler auch bitten, IDs zu den Steuerelementen hinzuzufügen, damit ich nicht auf die divs um sie herum verweisen muss, um sicherzustellen, dass ich die richtige bekomme :) –