使用webdriverio发送表单后获取URL

时间:2014-11-13 13:02:06

标签: javascript webdriver webdriver-io

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

这是我的问题。

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

  1. 我必须在常规网页上填写表格
  2. 发送表单后,我会被重定向到存在的网址,但在其查询参数之一中包含访问代码
  3. 然后我将此访问代码发送到另一个位置以获取访问令牌。
  4. 我需要的是一种以编程方式完成第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();
            });
        });
    });
    

    我得到了这个奇怪的输出:

      

    数据:text / html的,chromewebdata

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

    有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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);