Проблемы с локатором транспортира

Моя цель - вытащить css width определенного элемента.

Фактическая команда jQuery, которую я использую в консоли Chrome, работает хорошо:

$('div-grid-directive[grid-name="SAT"] .qMinus1_resize_expand').first().css('width');
"0px"

Однако при запуске Protractor в командной строке Win 7 я получаю следующую ошибку:

Message:
  Failed: element(...).first is not a function

Ошибка указывает на мою страницу объектов topNav.icons.page.js в this.getQMinus1Column :

module.exports = function(){        
    this.clickExpandRowsIcon = function(){
        $('.resize-btns > .glyphicon.glyphicon-resize-horizontal').click();
        browser.driver.sleep(2000);
    };
    this.getQMinus1Column = function(){            
        return element(by.css('div-grid-directive[grid-name="SAT"] .qMinus1_resize_expand')).first();
    };
};

и мой файл SAT.spec.js:

var IndexPage = require('./pageObjects/index.page.js');
var TopNavBar = require('./pageObjects/topNav.icons.page.js');

describe('Testing the Sales & Trading Top Nav grid icons', function(){
    var indexPage = new IndexPage();
    var topNavBar = new TopNavBar();
    
    beforeEach(function () {
        indexPage.get();   // Launches app !!        
    });
    describe('Clicking on the Expand Rows icon', function () {
  
        it('Should horizontally expand previous quarters qMinus1 thru qMinus6', function () {        
            topNavBar.clickExpandRowsIcon();
            var elem = topNavBar.getQMinus1Column();

            expect(elem).getCssValue().indexOf('width: 5px;').not.toBe('-1');            
	 });
    });
    
});

Поэтому, прежде чем я даже попытаюсь получить атрибут css width, я изо всех сил пытаюсь вернуть first(), используя этот формат:

return element(by.css('MY-CSS')).first();

У меня слишком много всего происходит в этой строке или, возможно, неправильный синтаксис для Protractor?

 return element(by.css('div-grid-directive[grid-name="SAT"] .qMinus1_resize_expand')).first();

Опять же, тот же синтаксис работает с использованием jQuery в консольных инструментах, поэтому выбор CSS правильный.

Здесь очень ценятся советы...

С уважением, Боб


person bob.mazzo    schedule 26.09.2016    source источник
comment
Эта проблема вдохновила меня на создание правила ESLint, которое бы обнаруживало такого рода проблемы на ранней стадии (очень удобно, если оно связано с ide, например webstorm — вы увидите предупреждение сразу после написания этого кода): github.com/alecxe/eslint-plugin-protractor/issues/55.   -  person alecxe    schedule 27.09.2016


Ответы (1)


В соответствии с этим , element не возвращает набор объектов для вызова метода first в Это.

Возможно, вы захотите использовать element.all(locator)

person vins    schedule 26.09.2016
comment
См. также мой пример SAT.spec.js выше, где я получаю переменную elem от this.getQMinus1Column . - person bob.mazzo; 26.09.2016
comment
Я могу получить ширину css следующим образом: element.all(by.css('MY-SELECTOR')).first() .getCssValue("width"); - person bob.mazzo; 27.09.2016