如何获得Protractor JS中最后一个元素的第n个

时间:2015-03-17 16:01:55

标签: angularjs jasmine protractor

这就是我所拥有的:

<input type=text class='someclass'> box1 </input>
<input type=text class='someclass'> box2 </input>
<input type=text class='someclass'> box3 </input>

我想使用ProtractorJS中的getAttribute('value')函数last()文本框2(意味着最后一个元素的第n个)。

describe('get input box value',function(){
    it('get value', function(){
       expect(element.all(by.className('someclass')).last().getAttribute('value').toBe('box2'));
    });
});

我无法使用像get()这样的get(1).getAttribute('value')函数,因为我的要求是具体的,这对我不起作用。

有没有人知道如何获得ProtractorJS中最后一个元素的第n个?

2 个答案:

答案 0 :(得分:9)

应该只需要{p> get。它可以采用负数索引-n表示从最后一个开始计算的第n个元素。见http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.get

即。说你有10个元素:[&#39; a&#39;,&#39; b&#39;,...,&#39; i&#39;,&#39; j&#39;]

$$('abc').get(0) -> 'a'
$$('abc').get(1) -> 'b'
$$('abc').get(-1) -> 'j'
$$('abc').get(-2) -> 'i'
$$('abc').get(-10) -> 'a'

答案 1 :(得分:2)

您可以使用count(),但需要使用then解决此问题才能获得实际的计数值:

var n = 1;  // set nth from the last

var elements = element.all(by.className('someclass'));
var index = elements.count().then(function (count) {
    expect(elements.get(count - n).getAttribute('value')).toBe('box2'));
});

作为替代方案,您可以使用XPath的{​​{3}}功能:

var elm = element(by.xpath('//input[@class="someclass"][last() - 1]'));
expect(elm.getAttribute('value')).toBe('box2')); 

或者,正如Austin在评论中所建议的那样,基于last()的类似CSS selector

var elm = element(by.css('input.someclass:nth-last-child(2)'));
expect(elm.getAttribute('value')).toBe('box2'));