我正在使用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;
};
答案 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);
})
// ...
干杯