理解Protractor和WebDriverJS控制流

3

请问有人能帮我理解在这种情况下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. });

由于ElementFinder.get方法,第6行是否添加了一个操作到WebDriverJS控制流中?
我猜测expect在第7行也会向控制流中添加另一个项目。 编辑:我已更新代码以使用element.all

ElementFinder 上的 get() 方法是用来做什么的?我不记得在 ElementFinder 上有这个方法。谢谢。 - alecxe
这行代码可能有用吗?https://github.com/angular/protractor/blob/6ebc4c3f8b557a56e53e0a1622d1b44b59f5bc04/lib/element.js#L247 - Ben Aston
是的,但这是ElementArrayFinderelement.all()的结果)。 - alecxe
好的,我已经更新了代码,使用element.all。这个遗漏是在将我的实际代码转换为此问题的简化版本时出现的错误。 - Ben Aston
1个回答

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

myElementFinder是一个ElementArrayFinder对象,这只是一个简单的对象。这里没有发生任何异步操作。

var pageObject = new MyPageObject(myElementFinder);

显而易见。
var button = pageObject.getButtonByIndex(0);
将返回一个ElementFinder。这里没有发生任何异步操作。
expect(button.text()).toBe('foo');
返回 Webdriver.schedule 的一个 promise,Webdriver.schedule 使用的是通过 webdriver.promise.controlFlow() 检索到的控制流,它公开了一个 execute 函数。请注意,保留了 HTML 标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接