首页 > 解决方案 > 将每个函数嵌套在量角器中

问题描述

我正在使用量角器在网页上运行基本的健全性测试。

在一页中有五个选项卡,在第三个(索引 = 2)内还有三个选项卡。

我已经编写了以下代码来按顺序遍历它们中的每一个。

if(index!=1)的原因是页面加载到第二个选项卡。

该代码正在安慰第二个if块内的元素。

但是没有执行第二个“每个”命令。

我在这里做错了什么?

我需要浏览器坚持到第三个主选项卡,然后浏览嵌套选项卡,然后转到第四个主选项卡。

it('going through the sub tabs in manage page', function(){

        expect(element.all(by.css('.settingsTabs li a')).count()).toBe(5);
        element.all(by.css('.settingsTabs li a')).each(function(element, index) {
            if(index!= 1){
                element.click();
                browser.driver.sleep(3000);
                browser.sleep(3000);
            }
            if(index == 2){
                console.log(element.all(by.css('.ng-isolate-scope ul li a')));
                element.all(by.css('.ng-isolate-scope ul li a')).each(function(element1) {
                    element1.getText().then(function(text) {
                        console.log(text);
                    });
                });
            }
        });
    });

标签: javascriptangularjsnestedjasmineprotractor

解决方案


我最终想通了。

我犯了两个错误。

一个是定位器,另一个是变量的命名。

由于我嵌套了每个函数,我必须将不同的变量名声明为参数。

就我而言,我将它们都命名为“元素”,这是所有这些麻烦的根本原因。

固定代码如下:

element.all(by.css('.settingsTabs li a')).each(function(elem, index) {
      if(index!= 1){ // here i named the passed argument "elem" 
        elem.click();
        browser.driver.sleep(2000);
      }
      if(index == 2){
        expect(element.all(by.css('.tab-pane li a')).count()).toBe(3);
        browser.driver.sleep(2000);
        element.all(by.css('.tab-pane li a')).each(function(elemen) { // here it is "elemen"
          elemen.click();
          browser.driver.sleep(2000);
          elemen.getText().then(function(text) {
          console.log(text);
          });
        });
      }
      if(index == 3){
        expect(element.all(by.css('.diagnostic-options li')).isPresent()).toBeTruthy();
      }
    });

推荐阅读