如何使用webdriverio验证其是否为登录页面

时间:2014-08-27 10:07:05

标签: javascript selenium callback webdriver-io

我正在使用Javascript,webdriverio(v2.1.2)从内部站点执行一些数据提取。内部站点启用了SSO,因此如果我在其他应用程序上进行了身份验证,则无需登录此应用程序(在企业Intranet应用程序中很常见)。 我计划实现以下目标,

  • 创建具有所需功能的客户
  • 传递所需的网址
  • 为了好玩:打印页面标题
  • 检查页面上是否存在元素。如果是,那么这是一个登录页面。如果没有,那么它不是登录页面

    login = function (username, password) {
    if (!browserClientUtil) {
        throw "Unable to load browserClientUtil.js";
    }
    browserClientUtil
      .createClient()
      .url(_Url)
      .title(function (err, res) {
            console.log('Title is: ' + res.value);
      }) .isExisting('input#login_button.login_button', function (err, isExisting) {
        browserClientUtil.getCurrentClient()
            .setValue('input#USER.input', username)
          .setValue('input#PASSWORD.input', password)
          //.saveScreenshot('ultimatixLoginDetails.png')
          .click('input#login_button.login_button')
          .pause(100);
          handlePostLogin();
    });
    

    };

这是最好的方法吗?我试图在单独的函数中分离验证登录页面的代码,它不起作用,因为webdriver中的所有内容都作为回调的一部分发生,我不确定我是否以正确的方式执行此操作。 如何从回调中返回,该回调又是该函数返回的最终值?

    login = function (username, password) {
    if (!browserClientUtil) {
        throw "Unable to load browserClientUtil.js";
    }
    browserClientUtil
      .createClient()
      .url(_Url)
      .title(function (err, res) {
            console.log('Title is: ' + res.value);
      });
      if(isThisLoginPage()){
            browserClientUtil.getCurrentClient()
            .setValue('input#USER.input', username)
          .setValue('input#PASSWORD.input', password)
          //.saveScreenshot('ultimatixLoginDetails.png')
          .click('input#login_button.login_button')
          .pause(100);
          handlePostLogin();
        }
};

    isThisLoginPage = function() {
    var client = browserClientUtil.getCurrentClient();
    if(!client) {
        throw "Unable to get reference for current client, hence cannot validate if this is login page.";
    }

    client.isExisting('input#login_button.login_button', function (err, isExisting) {
        if(isExisting) {
            return true;
        }
    });
    return false;
};

1 个答案:

答案 0 :(得分:6)

您可以通过创建包含其他命令的自己的命令来创建自己的工作流程。例如,您可以创建自己的登录命令:

browserClientUtil.addCommand("login", function(url, user, pw, cb) {
    this.url(url)
        .setValue('#username', user)
        .setValue('#password', pw)
        .submitForm('#loginForm')
        .call(cb);
});

这允许您隐藏简单函数背后的“复杂”异步webdriver操作。很容易创建一个强大的工具链。最后,您的测试脚本如下所示:

browserClientUtil
    .login("http://example.com/login", "john.doe", "testpass")
    .getTitle(function(err, title) {
        console.log(title);
    })
    // ...

干杯