我有3个页面对象:main.js,login.js和menu.js,并假设它们的函数名称与文件名相同,这是一系列测试
例如,我在main.js中有以下内容
module.exports={
commands=[{
main:function(){
return this.click("@login")
}
}],
elements:{
login: {
locateStrategy:'xpath'
selector: ('//a[@name="Log in"]')
}
}
}
测试序列之一是主要的 - >登录 - >菜单。
我尝试了以下内容:
var main = client.page.main()
var login = client.page.login()
var menu=client.page.menu()
...
var ok=main.main()
if(!ok){
return ok
}else {
return login.login()&&menu.menu()
}
但不断收到错误消息:
{ status: -1,
value:
{ error: 'invalid session id',
message: 'No active session with ID null',
stacktrace: '' },
errorStatus: 6,
error: '' }
如何通过调用页面对象来更改客户端? 和我的问题的任何合适的解决方案? 我已经检查了Multiple page objects in one test case,但这对我的情况并没有多大帮助,因为我必须多次重复使用这些对象。(不仅仅是A-> B-> C,可能是A-> C- > B或A-> C)
答案 0 :(得分:0)
根据我上面提到的链接问题,我在每个页面对象中添加了额外的回调,从而找到了可行的解决方案。
Main.js:
module.exports={
commands=[{
main:function(callback){
return this.click("@login")
.perform(callback)
}
}],
elements:{
login: {
locateStrategy:'xpath'
selector: ('//a[@name="Log in"]')
}
}
}
Login.js
module.exports={
commands=[{
login:function(callback){
return this.setValue("@id",'admin')
.setValue("@pw",'admin')
.perform(callback)
}
}],
elements:{
id: {
locateStrategy:'xpath'
selector: ('//input[@name="id"]')
}
pw: {
locateStrategy:'xpath'
selector: ('//input[@name="password"]')
}
}
}
Menu.js:
module.exports={
commands=[{
menu:function(callback){
return this.waitForElementVisible("@welcome")
.perform(callback)
}
}],
elements:{
welcome: {
locateStrategy:'xpath'
selector: ('//a[@name="Welcome !"]')
}
}
}
在我的测试中:
var main=client.page.main()
var login=client.page.login()
var menu=client.page.menu()
...
return main.main(function(){
login.login(function(){
menu.menu(function(){})
})
})
不是我想要实现的方式(不是链接页面对象),但它以这种方式工作。