类属性中的Javascript ES6常量undefined

时间:2018-02-08 08:57:48

标签: javascript selenium protractor

我正在使用Selenium在Protractor中进行自动化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_sr(”:: sr #header“)”, 我试过调用this._JOBBASEPATH.click()和_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 个答案:

答案 0 :(得分:2)

尝试将this.getIndex()替换为0

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

如果上述代码有效,则问题来自this.getIndex()

如果不起作用,问题来自element(...).all(...),它找不到任何元素,因此get(0)返回undefined。

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