量角器:如果定位器的结果发生变化,存储在变量中的元素也会发生变化



我有一个邀请列表,想看看第一个等待的邀请是否在触发后被接受。

<div class="invitation">
  <h1>A</h1>
  <div class="PENDING">PENDING</div>
</div>
<div class="invitation">
  <h1>B</h1>
  <div class="PENDING">PENDING</div>
</div>

规范中的一些代码使用h1存储第一个等待的邀请A

// get first element with css .PENDING
let pendingTxt = element.all(by.css('.PENDING')).get(0);
// get its parent : div.invitation with h1 A
let invitation = pendingTxt.element(by.xpath('ancestor::div'))

这里有一些脚本更新邀请状态接受

<div class="invitation">
  <h1>A</h1>
  <div class="ACCEPTED">ACCEPTED</div>
</div>
<div class="invitation">
  <h1>B</h1>
  <div class="PENDING">PENDING</div>
</div>

但是如果我现在记录邀请,它将返回邀请与h1 B

这意味着邀请已根据pendingText定位器更新。我不太明白为什么。

但是我找不到合适的方法来存储原始的邀请。我试图克隆它,但没有成功。

变量pendingTxt持有ElementFinder的Promise,该Promise将在每次解析元素时定位该元素。您不是在存储一个元素,通过机制来定位它。

因此,要存储一个元素,首先必须将Promise解析为WebElement:

protractor.promise.fulfilled(element.all(by.css('.PENDING')).get(0))
  .then(status => {
    expect(status.getText()).toEqual('PENDING');
    //  accept the invitation 
    expect(status.getText()).toEqual('ACCEPTED');
  })

或指向web元素列表:

element.all(by.css('.PENDING')).then(statuses => {
  expect(statuses[0].getText()).toEqual('PENDING');
  //  accept the invitation 
  expect(statuses[0].getText()).toEqual('ACCEPTED');
})

最新更新