2015-06-25 5 views
3

Может ли кто-нибудь помочь мне понять, как работает WebDriverJS/Protractor?Понимание потока транспортировщика и WebDriverJS

function MyPageObject(buttonElementFinder) { 
    this.getButtonByIndex = function(index) { 
    return { 
     myButton: buttonElementFinder.get(index) 
    } 
    } 
} 

1. describe('My button', function() { 
2. 
3. it('should contain the text foo', function() { 
4.  var myElementFinder = element.all(by.css('.foo')); 
5.  var pageObject = new MyPageObject(myElementFinder); 
6.  var button = pageObject.getButtonByIndex(0); 
7.  expect(button.text()).toBe('foo'); 
8. }); 
9. 
10. }); 

ли поток управления WebDriverJS действие добавляют к нему по линии 6 из-за .get метода ElementFinder с?

Я полагаю, что expect также добавляет еще один элемент в поток управления тоже по строке 7?

Редактировать: У меня есть обновленный код для использования element.all.

+0

Что такое метод 'get()' на 'ElementFinder'? Я не помню, чтобы этот метод существовал на «ElementFinder». Благодарю. – alecxe

+0

Эта строка может быть полезной? https://github.com/angular/protractor/blob/6ebc4c3f8b557a56e53e0a1622d1b44b59f5bc04/lib/element.js#L247 – Ben

+0

Да, но это 'ElementArrayFinder' (результат' element.all() '). – alecxe

ответ

3
var myElementFinder = element.all(by.css('.foo')); 

myElementFinder является ElementArrayFinder и является просто объект. Здесь ничего не происходит.

var pageObject = new MyPageObject(myElementFinder); 

Очевидное.

var button = pageObject.getButtonByIndex(0); 

Это вернет элемент ElementFinder из buttonElementFinder.get. Здесь ничего не происходит.

expect(button.text()).toBe('foo'); 

button.text() возвращает обещание от Webdriver.schedule, который в свою очередь использует поток управления, который извлекается с помощью webdriver.promise.controlFlow(), который выставляет выполнить функцию.

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