在使用zombie.js提交表单后遇到问题

时间:2013-05-28 22:00:07

标签: forms login coldfusion zombie.js

我的网站上有以下设置:

您在登录页面上输入凭据,然后转到第二页(通常不会产生屏幕输出),该页面会验证用户并将其重定向到相应的主页。

我的步骤定义包括三个步骤:

  1. 加载初始登录页面。
  2. 输入凭据并提交。
  3. 验证(通过检查页面标题)我在主页上创建的内容。
  4. 我的第一步是绚丽的色彩。

    我的第二步声称要通过。

    我的第三步失败了。

    经过审查,我发现这是因为第二步,虽然官方没有失败,但没有按照预期的那样做。僵尸卡在验证页面上。起初我以为它只是缺少重定向,但似乎它没有在验证页面上执行ANYTHING。我甚至评论了整个页面,只是在页面顶部输出“Hello”。如果我的browser.html();可以相信,它甚至没有看到。我知道我已经到了第二页,因为我有

    console.log("\n" + browser.location.href);
    

    显示第二页的网址。

    然后我

    console.log(browser.html());
    

    是空的。

    我甚至有一个:

    browser.wait(10000,callback);
    

    事先给它一些处理时间,但无济于事。

    可能相关的一些信息:

    这是一个ColdFusion网站。我知道zombie正在处理CF的概念,因为它最初加载了登录页面,尽管那里没有太多实际的CF处理。

    正在进行数据库访问。如果僵尸像常规浏览器一样访问,它应该没有区别,但它就在那里。虽然即使我对所有内容都进行了评论,但它仍然不起作用,所以我怀疑这实际上是相关的。

    这是我登录步骤的脚本部分。请告知我是否接近错误的方式。


      this.When(/^I input my credentials$/, function(callback) {
    
        browser.fill("login", "myusername").fill("password", "mypassword");
    
        browser.document.forms[0].submit();
    
        // Put in here to account for redirect time it will take to get past validation page to actual home page
    
        browser.wait(10000,callback);
    
        callback();
        });
    

    如果您需要任何其他信息,请告诉我。能够做到这一点,我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解您的问题,但看起来这可能是您处理异步调用的方式的问题。无论如何,你根本不需要browser.wait这样的东西。尝试以下内容:

this.When(/^I input my credentials$/, function(callback) {
    browser
        .fill("login", "myusername")
        .fill("password", "mypassword")
        .pressButton("#selectorForYourButton", function (err) {
            // Check for errors or any other behaviour this test is actually about
            callback();
        });
});

首先,pressButton方法更受欢迎,因为它更接近于测试实际的浏览器交互。但更重要的是,callback()仅在按下按钮触发的所有事件都已解决后执行。