【发布时间】:2016-09-06 05:12:40
【问题描述】:
使用 watir/cucumber/ruby 进行网页测试。问题是某些字段在没有 javascript 的情况下无法定位。
这是我要匹配的页面部分:
<!-- 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) -->
事实上,在网络浏览器中,我输入了一个值XYZ。但是像browser.element(xpath: %Q%*[@value="XYZ"]%) 这样使用xpath 找不到元素。另一方面,如果我执行browser.element(id: "key-value-editor-value-1006-0").value,则返回正确的XYZ 值。
现在你会问为什么不按 id 选择元素。这是因为这是一个键/值对输入字段表。我想通过使用key 值作为参数来编辑值。我不想为碰巧需要的每个组合保留单独的代码。
问题是:有没有办法只通过使用 watir 选择器提供键值XYZ 来选择元素。即用什么代替下面的????
browser.element(???)
更新:这是使用 javascript 的方法,但我想知道是否可以使用普通的 watir 选择器完成同样的事情:
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
【问题讨论】:
-
我不相信 XPath
%Q%*[@value="XYZ"]%是正确的。我相信应该是%Q%//*[@value="XYZ"]%。虽然我不认为这是你问题的根源。
标签: angularjs watir web-testing