量角器定位器链接无法找到元素文本

时间:2015-03-08 09:28:41

标签: angularjs protractor e2e-testing

我试图找到位于另一个元素下的元素,并且量角器似乎无法获得正确的值。

这是一个详细的描述。

我有以下HTML:

<div ng-repeat="stageRow in stageModel" debugId="stage-row">
  <div>
    <span debugId="stage-name-text">{{ stageRow.name }}</span>
  </div>
  <div>
    <span debugId="stage-count-text">{{ stageRow.count }}</span>
  </div>
</div>

然后我使用以下量角器代码找到一行:

var allStages = element.all(by.css('[debugId="stage-row"]'));
var stage01 = allStages.get(0);

然后我尝试链接定位器以找到某个单元格:

var count01 = stage01.$('[debugId="stage-count-text"]');

然后我期待:

expect(count01.getText()).to.eventually.equal('1')

这就是我得到的:

  + expected - actual

  +"1"
  -""

即使我明显有“1”作为舞台的计数。 我知道这是因为:

  1. 我亲眼看到它。)
  2. 我在调试模式下停止了 在期望之前,检查HTML确实看到了 该跨度的文本是“1”。
  3. 然后我试试这个:
  4. 我在预期之前打印了HTML:

    stage01.getOuterHtml().then(function(result) {
      console.log(result);
    });
    

    我看到了预期的HTML:

    <div ng-repeat="stageRow in stagingModel" class="ng-scope" debugid="stage-row">
      <div>
        <span debugid="stage-name-text" class="ng-binding">nuziba</span>
      </div>
      <div>
        <span debugid="stage-count-text" class="ng-binding">1</span>
      </div>
    </div>
    

    在那之后,我手动尝试:

    stage01.element(by.css('[debugId="stage-count-text"]')).getText().then(function(count) {
      console.log(count);
    });
    

    我在打印输出中得到了“”......

    然后我尝试使用不同的方法找到元素 - 使用by.repeater而不是by.css。得到了相同的结果。

    这里发生了什么? 显然,HTML包含正确的标记。 为什么量角器无法正确提取?

    为了记录,我正在使用量角器版本1.4.0, 跑步者是摩卡1.18.2,而不是Jasmine。

    非常感谢, 丹尼尔

1 个答案:

答案 0 :(得分:0)

你至少需要量角器1.7来使用expected conditions当前版本是2.0,所以如果你还有问题,你应该可以做这样的事情。

在这里你可以让量角器等到元素有文字&#39; 1&#39;在它,然后期望不会检查,直到满足该条件

var count01HasText = EC.textToBePresentInElement(count01, '1');
browser.wait(count01HasText, 5000,);
expect(count01.getText()).toEqual('1');