发送键不适用于页面对象模型
Send keys not working with Page Object Model
我刚开始在非 angular 应用程序上使用量角器试验页面对象模型。我不是新手,但离专家还差得远,所以如果我的措辞有误,请原谅我。我一直在研究和尝试几天没有运气的建议。
我有这个元素-
<input type="text" class="form-control" name="form_component_data[AgentsSettings][agent][chat_welcome_msg]" id="agentssettings-agent-chat_welcome_msg" value="How can I help">
在我的 POM 中我有
var txtWelcomemessage = element(by.css("input[name='form_component_data[AgentsSettings][agent][chat_welcome_msg]']"));
this.clearWelcomemessage = function(){
txtWelcomemessage.clear();
};
this.clearWelcomemessage = function(){
txtWelcomemessage.clear();
};
this.setWelcomemessage = function(){
txtWelcomemessage.sendKeys();
};
在我的测试脚本中我有
settings.clearWelcomemessage();
browser.sleep('5000');
settings.setWelcomemessage('Hey, Hey, Hey');
browser.sleep('5000');
清除消息有效,我在清除消息后看到光标在字段中,但发送键没有任何作用,也没有错误。
但是,当我将下面的代码直接输入到测试脚本中时,消息被清除并且发送键工作正常。
driver.findElement(by.css("input[name='form_component_data[AgentsSettings][agent]
[chat_welcome_msg]']")).click();
browser.sleep('3500')
driver.findElement(by.css("input[name='form_component_data[AgentsSettings][agent]
[chat_welcome_msg]']")).sendKeys('Hey, Hey, Hey');
这是迄今为止我在应用程序中使用的第三个字段。前两个字段使用 POM 没有任何问题。我不确定这个有什么不同。我可以使用它作为解决方法,但我只是想知道我在页面对象中缺少什么。
如果你的真实代码是这样的:
settings.clearWelcomemessage();
browser.sleep('5000');
settings.setWelcomemessage('Hey, Hey, Hey');
browser.sleep('5000');
那么这个就不行了,因为这些操作都是asynchronius
函数。意思是,他们不执行“线性”。其他编程语言通常在转到下一行之前等待函数完成,但在 js/nodejs 中的异步操作的情况下并非如此。
请尝试正确等待每个执行的函数::
settings.clearWelcomemessage().then(() => {
console.log('cleared welcome messgae! ')
return browser.sleep('5000').then(() => {
console.log('slept 5000')
return settings.setWelcomemessage('Hey, Hey, Hey').then(() => {
console.log('welcome message set!')
return browser.sleep('5000').then(() => {
console.log('second sleap done!')
})
})
})
}).catch(err => console.error('error occured!', err))
您还必须调整功能本身。他们执行
async
操作,你应该总是 return 结果,因为它们 return 一个 Promise
对象。 Docs
编辑:
实际上,给 sendKeys() 添加一个参数。没有密钥将不会被发送..
this.clearWelcomemessage = function(){
return txtWelcomemessage.clear();
};
this.clearWelcomemessage = function(){
return txtWelcomemessage.clear();
};
// add message parameter. Or no message will be sent :)
this.setWelcomemessage = function(message){
return txtWelcomemessage.sendKeys(message);
};
如果这解决了问题,您应该学习 promises
resp。 async & await
等
如果您了解 async
操作及其工作原理,请调整问题中的代码,因为它不是原始代码..
我刚开始在非 angular 应用程序上使用量角器试验页面对象模型。我不是新手,但离专家还差得远,所以如果我的措辞有误,请原谅我。我一直在研究和尝试几天没有运气的建议。 我有这个元素-
<input type="text" class="form-control" name="form_component_data[AgentsSettings][agent][chat_welcome_msg]" id="agentssettings-agent-chat_welcome_msg" value="How can I help">
在我的 POM 中我有
var txtWelcomemessage = element(by.css("input[name='form_component_data[AgentsSettings][agent][chat_welcome_msg]']"));
this.clearWelcomemessage = function(){
txtWelcomemessage.clear();
};
this.clearWelcomemessage = function(){
txtWelcomemessage.clear();
};
this.setWelcomemessage = function(){
txtWelcomemessage.sendKeys();
};
在我的测试脚本中我有
settings.clearWelcomemessage();
browser.sleep('5000');
settings.setWelcomemessage('Hey, Hey, Hey');
browser.sleep('5000');
清除消息有效,我在清除消息后看到光标在字段中,但发送键没有任何作用,也没有错误。
但是,当我将下面的代码直接输入到测试脚本中时,消息被清除并且发送键工作正常。
driver.findElement(by.css("input[name='form_component_data[AgentsSettings][agent]
[chat_welcome_msg]']")).click();
browser.sleep('3500')
driver.findElement(by.css("input[name='form_component_data[AgentsSettings][agent]
[chat_welcome_msg]']")).sendKeys('Hey, Hey, Hey');
这是迄今为止我在应用程序中使用的第三个字段。前两个字段使用 POM 没有任何问题。我不确定这个有什么不同。我可以使用它作为解决方法,但我只是想知道我在页面对象中缺少什么。
如果你的真实代码是这样的:
settings.clearWelcomemessage();
browser.sleep('5000');
settings.setWelcomemessage('Hey, Hey, Hey');
browser.sleep('5000');
那么这个就不行了,因为这些操作都是asynchronius
函数。意思是,他们不执行“线性”。其他编程语言通常在转到下一行之前等待函数完成,但在 js/nodejs 中的异步操作的情况下并非如此。
请尝试正确等待每个执行的函数::
settings.clearWelcomemessage().then(() => {
console.log('cleared welcome messgae! ')
return browser.sleep('5000').then(() => {
console.log('slept 5000')
return settings.setWelcomemessage('Hey, Hey, Hey').then(() => {
console.log('welcome message set!')
return browser.sleep('5000').then(() => {
console.log('second sleap done!')
})
})
})
}).catch(err => console.error('error occured!', err))
您还必须调整功能本身。他们执行
async
操作,你应该总是 return 结果,因为它们 return 一个 Promise
对象。 Docs
编辑:
实际上,给 sendKeys() 添加一个参数。没有密钥将不会被发送..
this.clearWelcomemessage = function(){
return txtWelcomemessage.clear();
};
this.clearWelcomemessage = function(){
return txtWelcomemessage.clear();
};
// add message parameter. Or no message will be sent :)
this.setWelcomemessage = function(message){
return txtWelcomemessage.sendKeys(message);
};
如果这解决了问题,您应该学习 promises
resp。 async & await
等
如果您了解 async
操作及其工作原理,请调整问题中的代码,因为它不是原始代码..