2016-10-27 3 views
1

У меня есть список приглашений и вы хотите, чтобы первый ожидающий был принят после некоторого триггера.транспортир: элемент, хранящийся в переменной, изменяется, если результат изменения локатора

<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

// 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.

Это означает, что приглашение было обновлено в соответствии с локатором ожидающего поиска. Я не знаю, почему.

Но я не могу найти способ правильно сохранить исходное приглашение. Я пытался клонировать его без успеха.

ответ

1

Переменная pendingTxt содержит обещание для ElementFinder, которое будет определять элемент каждый раз, когда будет разрешено. Вы не храните элемент по механизму, чтобы найти его.

Так, чтобы сохранить элемент, сначала нужно решить обещание к WebElement: более

element.all(by.css('.PENDING')).then(statuses => { 

    expect(statuses[0].getText()).toEqual('PENDING'); 

    // accept the invitation 

    expect(statuses[0].getText()).toEqual('ACCEPTED'); 

}) 
+0

Спасибо Я понимаю, я должен научиться:

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'); }) 

Или список веб-элементов о обещании. Но я немного смущен. глядя на документ http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.get, он получает доступ к getText() непосредственно после get (index). И попробовав свой код, я получил следующую ошибку: element.all (...). Get (...), а затем не является функцией. – sebap

+0

Мой плохой API не предоставляет прямого метода для решения 'ElementFinder'. См. Исправленное обновление. –

+0

Merci, теперь он работает. – sebap

Смежные вопросы