javascript - 使用 Protractor 自动化框架循环事件

标签 javascript protractor dom-events

我正在使用 Protractor - Javascript 运行自动化测试..我试图从表格格式的 UI 中获取值..

我编写了如下脚本..问题是当我进入“i”循环时..它正在获取“i”的所有值而不是“i”的第一个值,并且不继续进行“j”循环..

然而,一旦i循环完成..它会正确地进入下一个循环jk,其中j code> 和 k 循环按预期工作(按照其他编程语言中的通用循环标准)..

    this.cate = function () {
    let acct = [];
    return this.getCountOfCate().then((values) => {
        for (let i = 0; i < values; i++) {
            openAccounts.push(browser.findElement(locators.someField).getText());
            this.getRowCount().then((rowValues) => {
                console.log('rowValues is' +rowValues);
                for (let j = 0; j < rowValues; j++) {
                    this.getColumnCount().then((columnValues) => {
                        for (let k = 0; k < columnValues; k++) {
                            acct.push(element.all(classes.accountReports).all(by.css(getAccountCategoryCnt(i))).all(by.css('.title')).get(j).all(by.css('td')).get(k).getText());
                        }
                    })
                }
            });
        }
        return acct;
    });
}

上面的cate是一个函数,它将作为promise从其他步骤中调用,并期望在返回后返回数组acct中的值(值在此代码中返回)我正在将其与数组值进行比较..

唯一的问题是我没有按照正确的顺序进行操作,因为“i”循环一次完成所有操作,然后继续进行 jk 循环。

请建议这里可能存在什么问题..

最佳答案

由于我对您的表格的外观没有任何了解...以下是对示例 HTML 代码段使用映射函数的示例。 Promise 和 for 循环不能一起工作,这就是为什么我们有其他方法,如 mapreducefiltereach.

HTML 片段示例:

 <table>
   <tr>
     <td class="name">Foo</td>
     <td class="title">Developer</td>
   </tr>
   <tr>
     <td class="name">Bar</td>
     <td class="title">Designer</td>
   </tr>
  </table>

您可以有一个使用 element.allmap 的方法功能

  // returns a promise of a list of accounts
  getAccounts() => {
    return element.all(by.tagName('tr')).map(elem => {
      let account = new Account();
      let promises = [];
      let tds = elem.all(by.tagName('td'));

      promises.push(tds(by.css('.name')).getText().then(text => {
        account.name = text;
      }));
      promises.push(tds(by.css('.title')).getText().then(text => {
        account.title = text;
      }));

      return Promise.all(promises).then(() => {
        return account;
      });
    });
}

因此要获取值,您可以调用:

getAccounts().then(accounts => {
  console.log(accounts);
});

关于javascript - 使用 Protractor 自动化框架循环事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45222470/

相关文章:

angularjs - 如何在 Protractor 测试中获取页面上的所有内容/文本?

javascript - 无法点击可见链接

javascript - button.addEventListener 在嵌套 for 循环中不起作用

javascript - 选择 event.target 的下一个输入

javascript - kendo ui 窗口没有正确居中

javascript - 在 angularJS 单页应用程序中使用 javascript 打印一个 div

Protractor 按顺序多个浏览器

javascript - 如何确保EventListener最后执行?

javascript - 将所有 jQuery JavaScript 代码放在哪里?

javascript - 如何将焦点设置为 eventListener 的 tizen web 应用程序文档对象? (JavaScript)