Я использую Javascript, webdriverio (v2.1.2), чтобы выполнить извлечение данных с внутреннего сайта. Внутренний сайт включен SSO, поэтому, если я был аутентифицирован в другом приложении, мне не нужно входить в это приложение (обычно в корпоративных приложениях интрасети). я планирую достичь ниже,Как проверить, есть ли страница входа в систему с помощью webdriverio
- Создание клиента с необходимыми возможностями
- Передайте нужный URL
- Для удовольствия: Печать название страницы
Проверьте, если элемент существует на стр. Если да, то это страница входа. Если нет, то это не страница входа в систему
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;
};
Я знаю, что, если вызов внутренняя функция является асинхронным, то все функции «оборачивания» этот вызов должен также быть асинхронными, чтобы «вернуться ' ответ. Итак, мой последний вопрос был бы - был ли мой первый метод лучшим способом или, возможно, я должен заглянуть в отложенные и обещания сделать код модульным и читаемым? [link] (http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function) – rohitmohta