使用量角器对angularjs进行E2E测试,在运行单个测试文件和所有测试文件之间产生不同的结果

时间:2014-08-27 18:03:34

标签: angularjs protractor

我正在使用量角器在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',   '评估']

2 个答案:

答案 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);

当你整理好时,答案应该让人知道: - )

相关问题