我正在用硒进行自动化的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();
调试告诉我"没有找到定位器的元素:by.css_sr(" :: sr #header"(",我尝试打电话给这个。
我找到了解决方法,例如创建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)
返回未定义。
手动检查定位器以查看可以找到元素吗?如果是,请添加一些睡眠以等待页面加载。