【问题标题】:Find an Element in Protractor在量角器中查找元素
【发布时间】:2016-05-04 05:02:53
【问题描述】:
 <div>
                <label localize="{data: 'Name', suffix: ':'}">Name:</label>
                <span class="required" ng-class="{'disabled': meterCreating}" input-control="{title: 'Meter', okCallback:setMeterName, value: meter.meterName, ss: 'meters'}">
                    <span hs-placeholder="Enter Name" class="ng-binding"></span>
                </span>
            </div>

查找元素的最佳方法是什么:placeholder = "Enter Name"?

场景:使用上面的 Snippet 查找元素

用户点击“输入姓名”框,弹出另一个输入姓名的窗口。

【问题讨论】:

    标签: protractor


    【解决方案1】:

    基于该 HTML,我能看到的最简洁的方法是 css 链接:

    element(by.css('span.required span.ng-binding'))(通常只是span.ng-binding,但我非常怀疑这是独一无二的。我也怀疑span.required span.ng-binding 是独一无二的)

    还有许多其他选项,但它们不会很漂亮,因为它们将是相似的链。

    element(by.cssContainingText('label', 'Name:')).element(by.css('span &gt; span'));

    element(by.css('div label span.ng-binding')) 等..

    我建议向您的开发人员询问更好的定位器(特别是 ID),它使 JavaScript 更容易。不幸的是,我认为您无法通过 HTML 属性找到该元素,这是我最喜欢的方法之一。它应该是这样的:

    element(by.css('span[placeholder=Enter Name]')) -- 但我很确定这会为无效定位器引发错误。它接受大多数“标准”html 属性,例如valueoptionstyle 等...

    【讨论】:

    • @Gunderson,你的怀疑是对的。根据您的建议未找到该元素。 (未找到元素)...在量角器中查找元素的最佳定位器是什么,开发人员更改的可能性较小,因此我们将拥有可靠的测试用例和较少的维护?
    • @Kevin id 是迄今为止最好的,因为它是独一无二的。 Xpath 是最差的,因为它的维护和运行时间都很高。在我看来,介于两者之间的任何东西(cssmodel 等)都是个人喜好。
    • 我告诉我的开发人员我不在乎id 的实际名称是什么,只要它在那里。即使它是id="spanPlaceHolderEnterName" - 量角器会立即使用element(by.id(...)) 找到它(并且不会出现“发现多个元素...”错误等问题)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多