我有一个邀请列表,想看看第一个等待的邀请是否在触发后被接受。
<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');
})