如何在循环框架中执行带循环的代码块

时间:2014-08-06 14:44:19

标签: javascript testing selenium intern

我正在使用selenium的实习框架,我想执行一个循环来查找表中的元素。循环找到每个元素并将它们保存在数组中,之后将获取元素以便稍后进行操作。

接下来的想法是:

browser.wait(2000)            
.then(function () {
    while (true) {
    ifHasElements=browser.isDisplayed("/html/body/div[1]/div[5]/div[3]/div/div[3]/div[1]/table[2]/tbody/tr["+contRowsTable+"]").end()                    
    if (ifHasElements) {
        console.log("into if")                         
        browser.elementByXPath("/html/body/div[1]/div[5]/div[3]/div/div[3]/div[1]/table[2]/tbody/tr["+contRowsTable+"]/td[1]")
        .clickElement()
        .end()                    
        rows[contRowsTab]=browser.elementByXPath("/html/body/div[1]/div[5]/div[3]/div/div[3]/div[1]/table[2]/tbody/tr["+contRowsTable+"]")              
        } else {
           break
         }
    contRowsTab++;
    contRowsTable++;                  
    }
})

我不知道我是否执行循环并同时获取then块中的元素。有人可以帮助我,非常感谢..

1 个答案:

答案 0 :(得分:2)

尝试类似:

var visibleRows = [];
var stopStoring = false;

return browser
    .wait(2000)
    .then(function () {
        return this.parent
            // find all the rows
            .findAllByXpath('/html/body/div[1]/div[5]/div[3]/div/div[3]/div[1]/table[2]/tbody/tr')
            .then(function (rows) {
                // store the visible rows until the first non-visible row is encountered
                return rows.reduce(function (chain, row) {
                    return chain.then(function () {
                        return row
                            .isVisible()
                            .then(function (isVisible) {
                                if (!isVisible) {
                                    stopStoring = true;
                                }
                                if (isVisible && !stopStoring) {
                                    visibleRows.push(row);
                                }
                            });
                    });
                }, this.parent);
            })
            .then(function () {
                // for each visible row, click the first td in the row
                return visibleRows.reduce(function (chain, row) {
                    return chain
                        .findByXpath('./td[1]')
                        .click()
                        .end();
                }, this.parent);
            });
    });

在这段代码中,我首先找到并存储第一个连续的可见行。然后,对于每一行,我单击行中的第一个表格单元格。