mit Watir/Gurke/Ruby für Webseiten testen. Problem ist, dass einige Felder nicht ohne Javascript gefunden werden können. watir, erhalten Element nach Wert
Dies ist der Teil der Seite I übereinstimmen soll:
<!-- ngIf: (!entry.valueIcon) --><div ng-if="(!entry.valueIcon)" class="ng-scope">
<!-- valueAlt when value is not present or is on a separate object key such as valueFrom: { something: 'else' } -->
<!-- ngIf: entry.valueAlt -->
<!-- default value display -->
<!-- ngIf: (!entry.valueAlt) --><input ng-if="(!entry.valueAlt)" type="text" class="form-control ng-valid ng-scope ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-dirty ng-valid-parse ng-touched" ng-class="{ 'key-value-editor-set-focus-value-1006' : $last }" id="key-value-editor-value-1006-0" name="key-value-editor-value-1006-0" ng-attr-placeholder="{{ (!isReadonlyAny) && valuePlaceholder || ''}}" maxlength="" ng-model="entry.value" ng-readonly="isReadonlyAny || isReadonlySome(entry.name) || entry.isReadonly" placeholder=""><!-- end ngIf: (!entry.valueAlt) -->
</div><!-- end ngIf: (!entry.valueIcon) -->
In der Tat in Web-Browser ich einen Wert eingegeben XYZ
haben. Aber die Verwendung xpath
wie browser.element(xpath: %Q%*[@value="XYZ"]%)
findet kein Element. Auf der anderen Seite, wenn ich browser.element(id: "key-value-editor-value-1006-0").value
mache, dann wird der richtige Wert von XYZ
zurückgegeben.
Jetzt würden Sie fragen, warum nicht Element nach ID auswählen. Dies liegt daran, dass dies eine Tabelle mit Schlüssel/Wert-Paaren Eingabefeldern ist. Und ich möchte den Wert bearbeiten, indem ich den Wert key
als Parameter verwende. Ich möchte keinen separaten Code für jede Kombination, die gerade benötigt wird, behalten.
Frage ist: Gibt es eine Möglichkeit, das Element nur durch Angabe des Schlüsselwerts XYZ
mit Watir Selektoren auswählen. d. h., was an Stelle von ???
unten setzen?
browser.element(???)
Update: hier ist Ansatz mit Javascript, aber ich frage mich, ob gleiche kann mit einfachen watir Selektoren erfolgen:
browser.browser.execute_script(%Q%var p = new RegExp("^BARBATRON$"); var el = document.getElementsByTagName("input"); for (var i=0; i<el.length; i++) { if (p.test(el[i].value)) return el[i]; }%).click
Ich glaube nicht, dass der XPath '% Q% * [@ value =" XYZ "]%' korrekt ist. Ich glaube, es sollte '% Q% // * [@ value =" XYZ "]%' sein. Obwohl ich nicht glaube, dass das die Wurzel Ihres Problems ist. –