代码之家  ›  专栏  ›  技术社区  ›  JiggyJinjo

类属性中的Javascript ES6常量未定义

  •  1
  • JiggyJinjo  · 技术社区  · 7 年前

    我用硒在量角器中进行自动e2e测试。 我有一个类,我想在其中存储一个属性,以便更好地维护我的测试。

    下面是所讨论的课程:

    export class Tab {
        constructor(job) {
          this._criterionList = [];
          this._job = job;
          this._JOBBASEPATH = element(by.css_sr('iris-app::sr #jobs'))
            .all(by.css_sr('::sr iris-job')).get(this.getIndex());
    
          this._ACTIONMENUBASEPATH = this._JOBBASEPATH
            .element(by.css_sr('::sr #header'))
            .element(by.css_sr('::sr iris-floating-menu'));
    
          this._JOBFOOTERBASEPATH = this._JOBBASEPATH
            .element(by.css_sr('::sr job-footer'));
    
          this._RESULTBASEPATH = this._JOBBASEPATH
          .element(by.css_sr('::sr #result'));
        }
    }
    

    但是,在同一个类中调用我的一个方法时:

    //Method in Tab class, this._JOBBASEPATH is undefined
    getQueryConditionButton(){
      return this._JOBBASEPATH
        .element(by.css_sr('::sr #header'))
        .element(by.css_sr('::sr #condition'));
    }
    // _JOBBASEPATH is undefined
    tab.getQueryConditionButton().click();
    

    Debug告诉我“使用locator:by.css\u sr(“::sr#header”)”,找不到元素, 我试着打这个电话_JOBBASEPATH。单击(),则未定义\u JOBBASEPATH。

    我发现了一些解决方法,比如创建getter/setter或方法,做完全相同的事情,但我想了解 为什么这不起作用,尤其是当我在其他类中成功实现它时,比如:

    export class DetailField {
        constructor(tab) {
            this._tab = tab;
            this._displayFieldList = [];
            this._basePath = element(by.css_sr('iris-app::sr #jobs'))
             .all(by.css_sr('::sr iris-job')).get(this._tab.getIndex())
             .element(by.css_sr('::sr #customizer'))
             .element(by.css_sr('::sr #detailField'));
        }
    }
    
    //Method in DetailField class working perfectly
    getLoadButton(){
        return this._basePath
         .element(by.css_sr('::sr #loadButton'));
    }
    //works
    getLoadButton().click();
    

    注意:getIndex()调用为两个类返回相同的值:0 提前谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   yong    7 年前

    尝试替换 this.getIndex() 0 :

    this._JOBBASEPATH = element(by.css_sr('iris-app::sr #jobs'))
           .all(by.css_sr('::sr iris-job'))
           .get(0);
    

    如果上述代码起作用,则问题来自 这getIndex() .

    如果不起作用,问题来自 element(...).all(...) ,它找不到任何元素,所以 get(0) 返回未定义。

    手动检查定位器是否可以找到元素?如果是,请添加一些睡眠以等待页面加载。