微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

发送键不适用于页面对象模型 编辑:

如何解决发送键不适用于页面对象模型 编辑:

我刚刚开始在非角度应用程序上使用量角器试验页面对象模型。我不是新手,但离专家还差得很远,所以如果我的措辞全错了,请原谅我。我几天来一直在研究和尝试建议,但没有运气。 我有这个元素-

<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');

这是我目前在应用程序中使用的第三个字段。前两个字段使用 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').then(() => {
            console.log('welcome message set!')
            return browser.sleep('5000').then(() => {
                console.log('second sleap done!')
            })
        })
    })
}).catch(err => console.error('error occured!',err))


您还必须调整功能本身。他们执行 async 操作,您应该始终返回结果,因为它们返回一个 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 相关信息。 async & await

如果您了解 async 操作及其工作原理,请在问题中调整您的代码,因为它不是原始代码..

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。