0

我需要自动化登录过程测试。我正在使用webdriver.io来做到这一点。

这是我的问题。

我有这个奇怪的登录过程:

  1. 我必须在常规网页中填写表格
  2. 发送表单后,我将被重定向到一个存在的 URL,但它的一个查询参数中包含一个访问代码
  3. 然后我获取此访问代码并将其发送到另一个位置以获取访问令牌。

我需要的是一种以编程方式完成第 2 步的方法,因为第 1 步和第 3 步我已经弄清楚了。

我正在尝试这样:

var webdriverio = require('webdriverio');
var options = {
    desiredCapabilities: {
        browserName: 'chrome'
    }
};

webdriverio
    .remote(options)
    .init()
    .url(myUrl)
    .title(function(err, res) {
        console.log('Title was: ' + res.value);
    })
    .setValue('#usuario', user)
    .setValue('#password', password)
    .submitForm('form', function(){
        this.url(function(err, res){
            console.log(res.value);
        });
        this.pause(5000, function(){
            this.end();
        });
    });

但是,似乎submitForm在页面加载之前调用了回调。这样,我的日志会显示与我之前传递的完全相同的 URL。

如果我这样尝试:

.submitForm('form', function(){
    this.pause(5000, function(){
        this.url(function(err, res){
            console.log(res.value);
            this.end();
        });
    });
});

我得到这个奇怪的输出:

数据:文本/html,chromewebdata

我知道在这种情况下暂停并非完美无缺,但我找不到这样做的异步方式。

任何人都可以帮忙吗?

4

1 回答 1

1

提交表单后,您可能不会等待特定状态。表单提交后的预期结果是什么?

例如,您希望浏览器重定向到带有标题的页面

<h1 class="success">Your form is submitted successfully</h1>

然后你应该做这样的事情:

webdriverio
    .remote(options)
    .init()
    .url(myUrl)
    .waitForExist('form')
    .setValue('#usuario', user)
    .setValue('#password', password)
    .submitForm('form')
    .waitForExist('h1.success', 5000)
    .getText('h1', function (err, res) {
        expect(res).to.contain('submitted successfully'); //chai.js
    })
    .call(done);
于 2014-12-28T14:22:03.713 回答