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

标签 javascript selenium protractor

我正在使用 Selenium 在 Protractor 中进行自动化端到端测试。 我有一个类,我想在其中存储一个属性以更好地维护我的测试。

这是有问题的类:

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

调试告诉我“使用定位器找不到元素:by.css_sr("::sr #header")", 我尝试调用 this._JOBBASEPATH.click() 并且 _JOBBASEPATH 未定义。

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

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 提前致谢

最佳答案

尝试将 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)返回未定义。

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

关于类属性中的 Javascript ES6 常量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48681361/

相关文章:

javascript - 我如何使用 javascript 或 php 在没有打印窗口的情况下从网络浏览器打印页面或页面的一部分

javascript - 按名称获取一个选择框并设置另一个同名的选择框?

python - 如何将一组参数作为一个长变量传递给 find()/find_all()

java - 无法从 java 读取属性文件

javascript - 如何在 Protractor 测试中检查应用程序 URL 的状态代码?

javascript - ajaxForm 插件在点击任何 <button> 时提交

javascript - 用于向 dom 元素添加或删除类的 jquery 插件

Python Selenium - 尝试按类名查找元素时出错

javascript - 按升序和降序对日期数组进行排序部分不正确的逻辑- Protractor

protractor - 使用 Protractor 清除浏览器中的控制台日志