我正在用Selenium在量角器中进行自动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();调试告诉我“没有使用locator: by.css_sr(”:sr#header“)找到的元素”,我试着调用this._JOBBASEPATH.click(),_JOBBASEPATH是未定义的。
我找到了一些解决办法,比如创建getters/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,预先感谢
发布于 2018-02-08 11:37:16
尝试将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)返回未定义的元素。
手动检查定位器是否可以找到元素?如果是,请添加一些睡眠以等待页面加载。
https://stackoverflow.com/questions/48681361
复制相似问题