量角器无法捕获元素
Protractor cannot capture elements
我有过滤器列表(多选)和仪表板来显示所有项目。
第一次,仪表板将显示所有项目,然后我将选择过滤器列表中的项目,仪表板将仅显示过滤器列表中的项目。
所以我的测试是比较没有。过滤器列表中的项目必须等于没有。仪表板中的项目数。
但是dashboard会每3秒自动重新加载一次,问题是量角器无法及时统计dashboard中的元素,显示不相等的错误。
是否可以强制 Protractor 对一次显示的所有元素进行快照以用于比较?
我的应用程序已由 AngularJS 编码。
下面是测试的部分代码
it('show all visibled element', function(){
browser.get('http://localhost:8080/dashboard/');
browser.ignoreSynchronization = true;
// Delay browser
// Refer link :
var delayLoad = browser.driver.controlFlow().execute;
browser.driver.controlFlow().execute = function() {
var args = arguments;
delayLoad.call(browser.driver.controlFlow(), function() {
// delay 500 ms for dashboard renders all items
return protractor.promise.delayed(500);
});
return delayLoad.apply(browser.driver.controlFlow(), args);
};
var filter_expand = element(by.css('body > main > div > aside.aside.filter-bar.filters-closed > span'));
//browser.actions().mouseMove(filter_expand)
browser.actions().mouseMove(filter_expand).click().perform()
.then(function(){
var item_filter = element(by.css('body > main > div > aside.aside.filter-bar.filters-open > ng-include > div > nav > ul:nth-child(1) > li.filter-load > input:nth-child(3)'));
item_filter.click().then(function(){
var item_count = element(by.css('#s2id_autogen3 > ul')).all(by.css('li'));
var dashboard_count = element(by.css('div.dashboard > main > ul')).all(by.css('li'));
expect(item_count.count()).toEqual(dashboard_count.count());
});
});
})
我的解决方法是指定元素路径 (CSS) 并调用重试查找元素的函数,直到找到为止。
参见:http://darrellgrainger.blogspot.sg/2012/06/staleelementexception.html
下面是我的代码
function waitElement(elm,val){
element(by.css(elm)).getText().then(function(txt){
console.log(err_num);
expect(txt).toEqual(val);
}, function(err){
if (err_num < 5) {
err_num ++;
waitElement(elm,val);
}
});
}
err_num = 0;
waitElement('body > main > div > ng-view > div > main > ul > li:nth-child(1) > p.body-large.ng-binding','Found it');
我有过滤器列表(多选)和仪表板来显示所有项目。 第一次,仪表板将显示所有项目,然后我将选择过滤器列表中的项目,仪表板将仅显示过滤器列表中的项目。
所以我的测试是比较没有。过滤器列表中的项目必须等于没有。仪表板中的项目数。
但是dashboard会每3秒自动重新加载一次,问题是量角器无法及时统计dashboard中的元素,显示不相等的错误。
是否可以强制 Protractor 对一次显示的所有元素进行快照以用于比较?
我的应用程序已由 AngularJS 编码。
下面是测试的部分代码
it('show all visibled element', function(){
browser.get('http://localhost:8080/dashboard/');
browser.ignoreSynchronization = true;
// Delay browser
// Refer link :
var delayLoad = browser.driver.controlFlow().execute;
browser.driver.controlFlow().execute = function() {
var args = arguments;
delayLoad.call(browser.driver.controlFlow(), function() {
// delay 500 ms for dashboard renders all items
return protractor.promise.delayed(500);
});
return delayLoad.apply(browser.driver.controlFlow(), args);
};
var filter_expand = element(by.css('body > main > div > aside.aside.filter-bar.filters-closed > span'));
//browser.actions().mouseMove(filter_expand)
browser.actions().mouseMove(filter_expand).click().perform()
.then(function(){
var item_filter = element(by.css('body > main > div > aside.aside.filter-bar.filters-open > ng-include > div > nav > ul:nth-child(1) > li.filter-load > input:nth-child(3)'));
item_filter.click().then(function(){
var item_count = element(by.css('#s2id_autogen3 > ul')).all(by.css('li'));
var dashboard_count = element(by.css('div.dashboard > main > ul')).all(by.css('li'));
expect(item_count.count()).toEqual(dashboard_count.count());
});
});
})
我的解决方法是指定元素路径 (CSS) 并调用重试查找元素的函数,直到找到为止。
参见:http://darrellgrainger.blogspot.sg/2012/06/staleelementexception.html
下面是我的代码
function waitElement(elm,val){
element(by.css(elm)).getText().then(function(txt){
console.log(err_num);
expect(txt).toEqual(val);
}, function(err){
if (err_num < 5) {
err_num ++;
waitElement(elm,val);
}
});
}
err_num = 0;
waitElement('body > main > div > ng-view > div > main > ul > li:nth-child(1) > p.body-large.ng-binding','Found it');