我有一个邀请列表,想看一下触发后是否接受了第一个待处理的邀请。
<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'))
这里有一些脚本更新状态为ACCEPTED的邀请
<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定位器进行了更新。我不确定理解为什么。
但我无法正确存储原始邀请。我试图克隆它没有成功。
答案 0 :(得分:1)
变量pendingTxt
包含ElementFinder
的承诺,它将在每次解析时定位元素。您没有通过机制存储元素来定位它。
因此,要存储元素,首先必须将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');
})
或网页元素列表:
element.all(by.css('.PENDING')).then(statuses => {
expect(statuses[0].getText()).toEqual('PENDING');
// accept the invitation
expect(statuses[0].getText()).toEqual('ACCEPTED');
})