2016-08-19 2 views
3

источник: http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.locatorпочему локатор() в транспортир?

// returns by.css('#ID1') 
$('#ID1').locator() 

// returns by.css('#ID2') 
$('#ID1').$('#ID2').locator() 

// returns by.css('#ID1') 
$$('#ID1').filter(filterFn).get(0).click().locator() 

Что я считаю, за исключением локатора() также делает ту же работу, как раз; любая причина или конкретная причина для этого API?

ответ

3

Лично я просто использую его для лучшего ведения журнала ошибок. т.е.

it('should display the facility name', function() { 
    var el = element(by.css('div.facilityName')); 
    expect(el.isDisplayed()).toBe(true, 'Expected element ' + el.locator() + ' to be present and visible'; 
}); 

Это возвращает в моей консоли:

неисправностями:

1) должен отображать название объекта

Ожидаемое ложь, чтобы быть правдой «, ожидаемый (селектор CSS, div.facilityName) для присутствия и видимости.

Кроме того, я использую его с некоторыми вспомогательными функциями (я использую транспортир на Non-Угловой, поэтому у меня нет силы ждет угловых синхронизаций, доступных для меня, поэтому я использую хелпер, как показано ниже:

/** 
* @description Prevents test execution until the given element is present in the DOM 
* @param [el] The element locator [time] The optional max timeout in ms [opts] The options 
*/ 
Util.prototype.waitForElementPresent = function (el, time, opts) { 
    var timeout = time || 0, 
    counter = 0, 
    verbose = opts ? opts.verbose : false; 

    return browser.wait(function() { 
     if (verbose) { 
      process.stdout.write(!counter ? 'waitForElementPresent [' + el.locator() + '] ' : '.'); 
      counter = counter + 1; 
     } 
     return el.isPresent(); 
    }, timeout).then(function() { 
     if (verbose) { 
      process.stdout.write('\n'); 
     } 
    }); 
}; 

Использование:

it('should display the facility name', function() { 
    var el = element(by.css('div.facilityName')); 
    Util.waitForPresentAndVisible(el, 10000, {verbose: true}); 
    expect(el.isDisplayed()).toBe(true, 'Expected element ' + el.locator() + ' to be present and visible'; 
}); 

Это выводит на консоль:

waitForElementPresent [К (селектор CSS, div.facilityName)] ..........

Это несколько тривиально, так как ошибка будет включать линию и индекс неисправного кода в любом случае. Но я считаю полезным в некоторых случаях просто улучшить регистрацию ошибок.

Мне любопытно, как другие люди используют его.

+1

Интересно :) Я также подозреваю некоторые особенности в этом API, как вы ... –

+1

Интересный случай использования! Добавлено еще один. – alecxe

2

Существует не так много пользы locator() для реального мира, но вот еще один пример использования - avoid using by.xpath() in solving the "getting direct child of a current element" problem with CSS selectors, получив локатор родительского элемента и связав его с прямой дочерней частью для динамического создания полного селектора CSS.

+1

Конечно, нам нужно для конкатенации; Документы транспортира находятся за stackoverflow :) –

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