我正在使用量角器在angularjs应用程序上进行E2E测试。我开始使用npm设置的角度种子基础项目,使用命令npm run protractor运行所有的e2e测试,它实际上只运行“protractor test / protractor-conf.js”。我有一个测试进入页面,选择一个下拉菜单项,然后验证结果
it('should render all of the available '+subsystem.subsystem_name+' that can be created', function() {
//首先从下拉列表中选择适当的子系统
element(by.cssContainingText('.subsystem_select option', subsystem.subsystem_name)).click().then(function(){
var create_table = element.all(by.css('table')).get(0);
// filter the General Options and check that the Option Create Table is rendered correctly
browser.executeScript(function(ms_valid_options,subsystem_id) {
return angular.element(document).injector().get("$filter")("filter")(ms_valid_options, {subsystem_id:subsystem_id})
}, MS_VALID_OPTIONS, subsystem.subsystem_id).then(function(filtered_options){
expect( element.all(by.repeater('option in valid_options')).count() ).toEqual(filtered_options.length);
filtered_options.forEach(function(valid_option,i){
var current_row = element.all(by.repeater('option in valid_options')).get(i);
expect( current_row.all(by.css('td')).get(0).getText() ).toEqual(valid_option.option_name+"("+valid_option.default_value+")"); //first table cell has text option_name(default_value)
expect( current_row.all(by.css('td')).get(1).getInnerHtml() ).toEqual('<input type="button" value="Add Option" ng-click="addOption(option)">')//second table cell contains the add option button
expect( current_row.all(by.css('td')).get(2).all(by.css('span')).get(0).getText() ).toEqual('?');//third table cell contains the help questionmark
});
});
});
});
当我运行单个测试文件时,所有测试都按预期传递,但是当我使用npm run protractor命令运行所有测试文件时,此测试失败并显示错误
TypeError:Object [object Object]没有方法'all' 而这个错误是抱怨行
expect( current_row.all(by.css('td')).get(0).getText() ).toEqual(valid_option.option_name+"("+valid_option.default_value+")");
对此问题的任何见解都将不胜感激
由于
修改的 只需要更多信息,当运行单个文件(成功案例)时,current_row是一个带有这些键的对象 ['locator_', 'parentElementFinder_', 'opt_actionResult_', 'opt_index_', “点击”, '的SendKeys', 'getTagName', 'getCssValue', '的getAttribute', '的getText', '的getSize', '的getLocation', '的IsEnabled', 'isSelected', '提交', '明确', '被展示', 'getOuterHtml', 'getInnerHtml', 'toWireValue']
当测试与所有其他测试一起运行时(故障情况),current_row是一个带有这些键的对象 [ '然后', '取消', '等待中', 'errback可', 'driver_', 'ID_', “点击”, '的SendKeys', 'getTagName', 'getCssValue', '的getAttribute', '的getText', '的getSize', '的getLocation', '的IsEnabled', 'isSelected', '提交', '明确', '被展示', 'getOuterHtml', 'getInnerHtml', 'toWireValue', '$', 'findElement', '$$', 'findElements', 'isElementPresent', '评估']
答案 0 :(得分:0)
我遇到过测试干扰的问题,这可能就是这种情况。我基本上只需要在每次测试后通过在afterEach()中进行注销,并从每次测试的登录或相关测试集开始确保我处于正确的状态。
答案 1 :(得分:0)
首先,我将使用PageObject(po)使测试更具可读性。例如,您最初可以包括:
var poSubsystem = {}, option1Text='..';
poSubsystem.table = element(by.tagName('table')).first();
poSubsystem.options = poSubsystem.table.all(by.tagName('td'));
poSubsystem.option1 = poSubsystem.options.first();
// .etc
expect(poSubsystem.option1.getText()).toEqual(option1Text);
当你整理好时,答案应该让人知道: - )