與角工作,這是很常見的有HTML隱藏的同位的多層次,但此前在整個html頁面比可見元素你希望與之合作。
對於一般調試,打開您的網站到您期望量角器測試的位置,然後打開html並在html上查找您的量角器測試正在搜索的元素。請注意它是否可見,以及它整體位於何處。
請考慮是否要爲頁面的不同區域添加標籤,以便元素可以顯示,然後使用父代和子代選擇器來獲取您想要的標籤。
您也可以使用此只選擇第一個可見的元素:
// Takes a protractor webelement and returns the first displayed version
// Ex:
// var coolBox = $('.coolBox');
// var visibleCoolBox = getFirstVisibleProtractorElement(coolBox);
this.getFirstVisibleProtractorElement = function(selector){
var allElementsOfSelector = element.all(by.css(selector.locator().value));
return allElementsOfSelector.filter(function(elem) {
return elem.isDisplayed().then(function(displayedElement){
return displayedElement;
});
}).first();
};
通行證中的任何元素,你想,它會採取的定位和獲得它的第一個可見的版本。您也可以取下.first()部分以返回可視元素的數組。
編輯:
要利用這一點,我會給出一個量角器+茉莉例子。我希望這應該工作,因爲有任何數量的頁面上所需的元素,至少有一個可見。雖然這不在我的頭頂,所以我可能在某個地方犯了一個錯誤。
example_spec.js
var examplePage = require('./example_page.js');
describe('Extracting visible elements', function(){
it('A visible element can be extracted', function(){
expect(examplePage.isACoolBoxVisible()).toBeTruthy('Error: No visible CoolBoxes');
});
});
example_page.js
var protractorUtils = require('./protractor_utils.js');
module.exports = new function(){
var elements = {
coolBox: $('.coolBox')
};
this.getVisibleCoolBox = function(){
return protractorUtils.getFirstVisibleProtractorElement(elements.coolBox);
};
this.isACoolBoxVisible = function(){
return getVisibleCoolBox.isDisplayed();
};
};
protractor_utils.js
module.exports = new function(){
this.getFirstVisibleProtractorElement = function(selector){
var allElementsOfSelector = element.all(by.css(selector.locator().value));
return allElementsOfSelector.filter(function(elem) {
return elem.isDisplayed().then(function(displayedElement){
return displayedElement;
});
}).first();
};
};
我是量角器(和一些JS函數)的新手......這是怎麼回事?在我的spec文件中描述之前? – Jeff
@Jeff我會讓這個「幫助」庫的一部分,您可以在spec文件中要求或通過'global'在'onPrepare()'中提供。 – alecxe
好的。那裏有文檔嗎?我製作了一個庫,但它使用'exports.someFunction = function ...' – Jeff