了解Protractor和WebDriverJS控制流程

时间:2015-06-25 14:02:30

标签: javascript selenium protractor webdriverjs

有人可以帮我理解WebDriverJS / Protractor在这种情况下的工作原理吗?

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. });

由于.get的{​​{1}}方法,WebDriverJS控制流是否在第6行添加了操作?

我认为ElementFinder也会在第7行向控制流添加另一个项目?

修改:我已更新代码以使用expect

1 个答案:

答案 0 :(得分:3)

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

myElementFinder是一个ElementArrayFinder,只是一个对象。这里没有发生异步。

var pageObject = new MyPageObject(myElementFinder);

显而易见的。

var button = pageObject.getButtonByIndex(0);

这将从buttonElementFinder.get返回一个ElementFinder。这里没有发生异步。

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

button.text()Webdriver.schedule返回一个承诺,该承诺反过来使用的是使用webdriver.promise.controlFlow()检索的控制流,它会公开执行函数。