将每个函数嵌套在量角器中

时间:2018-07-06 11:28:16

标签: javascript angularjs nested jasmine protractor

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

在一页中有五个选项卡,在第三个(index = 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);
                    });
                });
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

我终于明白了。

我犯了两个错误。

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

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

在我的情况下,我将它们都命名为“ element”,这是所有这些麻烦的根本原因。

固定代码如下:

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();
      }
    });