量角器 - 当子元素也是页面中其他位置的主要元素时,如何在元素内查找元素

hny*_*015 3 javascript testing angularjs selenium-webdriver protractor

<div class="base-view app-loaded" data-ng-class="cssClass.appState">
<div class="ng-scope" data-ng-view="">
<div class="ng-scope" data-ng-include="'partial/navigation/navigation.tpl.html'">
<div class="feedback-ball feedback-ball-show feedback-ball-big" data-ng-class="feedback.cls" data-ng-click="outside($event)" data-feedback-ball="">
<span class="close-button"></span>
<h2 class="ng-binding">Welcome to Garbo</h2>
<div class="ng-scope ng-binding" data-ng-bind-html="feedback.html" data-ng-if="feedback.html">
<p>Here you can play in style in a safe and secure environment.</p>
<p>
<a class="btn" href="/account">My Account</a>
<a class="btn" href="/deposit">Deposit</a>
</p>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想在data-ng-bind-html ="feedback.html"中找到并点击/ account按钮,我可以找到data-ng-bind-html ="feedback.html",但我找不到其中的帐户按钮.当我尝试查找帐户按钮时,它会给我一个错误,即该页面有多个帐户按钮,因此更具体.

我尝试了元素.().element()但它没有用,请帮忙

ale*_*cxe 6

element可以将调用链接到其他元素中查找元素,因此您的element().element()解决方案应该有效.

或者,您可以构造一个xpath表达式来到达相应内部的链接div:

element(by.xpath('//div[@data-ng-bind-html = "feedback.html"]//a[@href = "/account"]'))
Run Code Online (Sandbox Code Playgroud)


小智 6

问题在于,webDriver正在查找多个匹配的元素。您可以使用element来查找一个元素,用element.all来获取元素数组,然后可以使用.get()和元素索引,或者使用first()或last()。你可以做,

element(by.css('[data-ng-bind-html="feedback.html"]')
.element(by.cssContainingText('.btn', 'My account'));
Run Code Online (Sandbox Code Playgroud)

如果不起作用,则可能有多个,如果可以,则可以使用,

element(by.css('[data-ng-bind-html="feedback.html"]')
.all(by.cssContainingText('.btn', 'My account')).first();
Run Code Online (Sandbox Code Playgroud)

但是在HTML中,您将有多个按钮,webDriver将仅获得一个按钮,另一件事是,使用count()可以使您获得元素数组的长度,并且您可以知道有多少个按钮。