有人可以帮我理解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
。
答案 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()
检索的控制流,它会公开执行函数。