是否可以在不链接的情况下在单个测试中使用多个页面对象?
Is it possible to use multiple page objects in a single test without chaining?
我有 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: '' }
如何通过调用页面对象改变客户端?
以及适合我的问题的解决方案吗?
我检查了 ,但这对我的情况并没有真正的帮助,因为我必须多次重复使用这些对象。(不仅仅是 A->B->C,可能是 A->C->B 或A->C)
根据我上面提到的链接问题,我通过在每个页面对象中添加额外的 callback 找到了一个可行的解决方案。
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(){})
})
})
不是我想要实现的方式(不是链接页面对象),但它是这样工作的。
我有 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: '' }
如何通过调用页面对象改变客户端?
以及适合我的问题的解决方案吗?
我检查了
根据我上面提到的链接问题,我通过在每个页面对象中添加额外的 callback 找到了一个可行的解决方案。
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(){})
})
})
不是我想要实现的方式(不是链接页面对象),但它是这样工作的。