将Javascript元素作为变量传递

时间:2016-02-22 16:33:18

标签: javascript

我正在为AngularJS应用程序做一些测试,我不认为测试框架在这里必不可少,但我试图传递一个可选变量。此变量将指定我是否正在尝试获取传递给函数的ID的子元素

commonFunctions.elementDoesNotHaveAttribute('register-0', 'disabled', 'children[0].children[0]');

children[0].children[0]实际上不是一个字符串,如果删除引号,则函数调用失败,因为它找不到.children[0]的子对象

这是函数

function elementDoesNotHaveAttribute(id, attribute, child) {
    var hasElement = false;

    hasElement = casper.evaluate(function (id, attribute, child) {
        var element = document.getElementById(id);
        if (child) {
            element = element.child;
        }        
        return element.hasAttribute(attribute);
    }, id, attribute, child);

    if (hasElement) {
        casper.test.fail('element has' + attribute + ' but shouldn\'t');
    } else {
        casper.test.pass('element didn\'t have ' + attribute + ' and shouldn\'t');
    }
}

如何更改这些方程式的任何一方以最终评估我的函数中的element.children[0].children[0]

1 个答案:

答案 0 :(得分:2)

虽然" eval hack"我发表的评论会发挥作用,这是一个坏主意。相反,考虑通过某种"转换"功能

if( child) {
    element = child(element);
}

在致电children[0].children[0]时,您可以这样做:

commonFunctions.elementDoesNotHaveAttribute(
    'register-0',
    'disabled',
    function(e) {return e.children[0].children[0];}
);

该函数将获取元素并返回与其相关的其他内容。根据需要调整功能。