by.css()查找元素,但如果附加了任何内容,则不会抛出使用定位符错误的元素

时间:2016-08-02 14:53:54

标签: javascript protractor

我正在使用量角器进行测试,我正在尝试使用标题标签访问HTML上的元素。问题是,当我尝试使用title标签附加到元素时(我需要一个更向下的元素来测试innerHTML),我得到了使用locator找到的&#34; No元素:By(css selector)error。< / p>

此代码通过:

browser.element.all(by.css('div[data-row="1"]')).get(0).element(by.css('div[class="widget-body"]')).
element(by.css('section[class="scrollable"]')).element(by.css('div[title="myTitle: myTitle"]'));

但是这段代码没有:

browser.element.all(by.css('div[data-row="1"]')).get(0).element(by.css('div[class="widget-body"]')).
element(by.css('section[class="scrollable"]')).element(by.css('div[title="myTitle: myTitle"]')).
element(by.css('span[class="text-I-Want ng-binding"]')).getInnerHtml();

Html元素:

<div title="myTitle: myTitle">
    <header><b class="ng-binding">myTitle</b></header>
        <section>
            <h3><span class="text-on-hand ng-binding">myTitle</span>
        </section>
</div>

数据行/ widget-body / scrollable元素是我需要访问的元素的父元素。我无法在网上找到任何告诉我为什么会这样的资源。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

第一个代码块传递的原因是 Protractor在这种情况下实际上并不会尝试定位元素。只有当您对元素执行操作或询问某个属性或属性时,您才会触发量角器尝试定位元素。

换句话说,问题在于您找到元素的方式。

您构建的定位器链看起来不可靠,您应该调试链的哪个部分导致错误。 Put a browser.pause() or browser.debugger()并在shell中尝试CSS选择器。

由于我们无法重现您的问题,因此很难说清楚。