【问题标题】:Locating element in Protractor when two elements having same attributes当两个元素具有相同属性时在量角器中定位元素
【发布时间】:2016-12-11 20:50:09
【问题描述】:

以下是两个输入框的代码,当它们具有相同的属性时,如何定位特定元素?

<input name="inputText" ng-required="field.required" ng-change="handleEdit('First name',selectedSensor[field.key],field.key)" ng-model="selectedSensor[field.key]" ng-pattern="/^[a-z]+$/i" maxlength="100" class="ng-pristine md-input ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-touched"  required="required" aria-invalid="true" style="">

<input name="inputText" ng-required="field.required"  ng-change="handleEdit('Last name',selectedSensor[field.key],field.key)"  ng-model="selectedSensor[field.key]" ng-pattern="/^[a-z]+$/i"  maxlength="100" class="ng-pristine md-input ng-empty ng-invalid ng-invalid-  required ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-touched"  required="required" aria-invalid="true" style="">  

【问题讨论】:

  • 请编辑您的代码。它不可见!

标签: javascript angularjs testing automation protractor


【解决方案1】:

看不到你的代码,不过答案很简单。

通过element.all -- http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.all 将这两个元素分配给 ElementArrayFinder

然后使用 get() 根据 ElementArrayFinder 中的索引获取适当的元素 -- http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.get

例如:

var userNavLinks = element.all(by.css('li.navbar-item'));
var targetLink = userNavLinks.get(2);
expect(targetLink.getText()).toEqual('My Link');

您也可以在一行中完成: element.all(by.css('li.navbar-item')).get(1).click()

【讨论】:

  • 这个零索引了吗?所以第一个是 get(0)?
【解决方案2】:

如果您可以控制被测应用,请考虑添加有意义的 id 或类或自定义属性,以唯一标识元素以简化 e2e 测试

鉴于我们目前所拥有的,您可以依赖 ng-change 属性:

var firstName = $('input[ng-change*="First name"]');
var lastName = $('input[ng-change*="Last name"]');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多