2017-04-01 39 views
2

第一次嘗試e2e測試我的AngularJS應用程序。量角器失敗:browser.findElements(...)。全部不是函數

我有一個類與'元'的UL。 ul有幾個李。 我想抓住第一個李並將其與字符串進行比較。

var duration = browser.findElements(by.className('meta')).all(by.tagName('li')).get(1); 

但在運行測試中,我不斷收到錯誤時:失敗:browser.findElements(...)一切都不是功能。

我已經試過findElement和findElements,並一直得到相同的錯誤。

我偶然發現了前面的這個問題:Selecting second anchor element within lists using protractor。但它沒有幫助我。

回答

2

這是更好地使用量角器的「默認」 ElementFinder語法,即例如element(by.css('ul')),看到docs

然後,您將得到這個

var duration = element(by.className('meta')).all(by.tagName('li')).get(1);

或者element.all(by.css('.meta li')).first();,請參閱docs

或簡寫$$('.meta li')).first();,請參閱docs

+0

非常感謝!你知道我的代碼爲什麼不起作用嗎?除了瀏覽器。這是不是非常不同 – Urban

5

目前接受的答案在你應該使用的方面是正確的,但這裏是你的代碼不起作用的原因。

量角器,如您所知,包裝WebDriverJS - selenium javascript綁定。除此之外,它增加了許多便利概念,如ElementFinderElementArrayFinderbrowser對象。

量角器還提供了一種方法來調用純WebDriverJS函數和方法直接,像,例如,它允許到browser對象上使用findElement()findElements()或。

在你的情況下,browser.findElements(by.className('meta'))將返回一個WebElement的數組,這是一個純粹的WebDriverJS概念。請注意,這不是ElementArrayFinder實例,此時您不在量角器區域。

現在,您正嘗試在此數組元素上調用.all()函數,並且顯然會失敗。

這樣做的量角器方法是:

var duration = $$('.meta li').first(); 

或者,你甚至可以用一個單一的選擇脫身:

var duration = $('.meta li:first-of-type'); 

相關閱讀:

+0

嗨@alecxe,你能幫我學習先進的量角器。深入量角器。每個承諾是如何工作的,一些有用的鏈接github量角器提前學習。我的問題很廣泛,但無論您能提供哪些鏈接來研究量角器的一些先進概念。 –

+0

@KishanPatel [量角器文檔](http://www.protractortest.org/#/)實際上是一個很好的開始。但是,不要深入瞭解太多理論 - 只要走出去,讓事情自動化:)練習,練習! – alecxe

+0

是的。量角器文檔非常容易理解。正如你所說,我一直在做實用的東西。除此之外,github上的其他重要文檔/存儲庫? –