Javascript将链接函数包装在单个函数中

时间:2015-11-17 04:52:34

标签: javascript chaining intern

我正在使用intern进行一些javascript功能测试,并希望开始抽象我的测试代码以使其更具可重用性。我不确定这是否可能,但我正在努力实现以下目标 -

我的原始代码具有以下格式 -

this.remote.get(URL).setFindTimeout(5000).end()
.findByXpath(xpath).click().type('XXX').end().
.findByXpath(xpath).click().type('YYY').end()
.findByCSSSelector(css).click().doSelectBoxStuff().end() //and so on...

其中每一行可能是输入字段的不同类型的输入。我试图在进入这些不同的输入类型时将功能抽象出自己的功能,比如这个 -

this.remote.get(URL).setFindTimeout(5000).end()
    .enterTextBox('XXX')
    .enterTextBox('YYY')
    .enterSelectBox('ZZZ')

function enterTextBox(val){
    //execute  .findByXpath(xpath).click().type(val).end()
}

function enterSelectBox(val){
    //execute  .findByCSSSelector(css).click().doSelectBoxStuff().end()
}

这样的事情可能吗?如果是这样,在我的两个新函数中会调用.findByXPath(xpath)...等什么?

2 个答案:

答案 0 :(得分:2)

你绝对可以。只需将函数作为参数传递给函数。您可以通过更改其原型来定义对象的方法。所以为了实现你想要的行为,你要写下这个:

// Ideally, replace this.remote.get(URL) with a base instance of the object
this.remote.get(URL).prototype.enterTextBox = function() {
    return this.findByXpath(xpath).click().type(val).end()
}

this.remote.get(URL).setFindTimeout(5000).end()
    .enterTextBox('XXX')

等。关键是返回obj以便链接。

答案 1 :(得分:0)

如果要执行链接,那么您的函数必须返回正在执行操作的“对象”。