Я хочу использовать Транспортир на Java, а не на Node.js. Можно ли использовать Protractor с Java или Python? Мы не хотим добавлять еще одну технологию для тестирования и хотим использовать существующие технологии.Используйте транспортир с Java
ответ
К сожалению, у вас нет большого выбора в этом вопросе, так как Protractor - это платформа JavaScript для тестирования AngularJS, которая распространяется через Node.js.
Мы не хотим добавлять еще одну технологию для тестирования и хотим использовать существующие технологии.
Проходчик предназначен для угловых применений. Поэтому, если ваше приложение было создано с помощью AngularJS, то Protractor поможет, поскольку он имеет встроенную поддержку загрузки и действий на странице AngularJS.
Если ваше приложение не построено поверх Углового, вы можете использовать Selenium WebDriver поверх любых других языков, которые вы предпочитаете.
Selenium предоставляет пользователям документацию по использованию Python в качестве среды для написания тестов, подробнее об этом here.
Чтобы добавить что-то к ответу Тома выше, вы можете даже протестировать приложения или веб-сайты, не имеющие углов, с помощью Protractor. Но до сих пор нет способа, вы можете написать тесты Protractor с использованием Java или Python, поскольку ядро Protractor построено на Javascript (node.js) и является чисто Javascript. Надеюсь, поможет.
Наилучший способ использования транспортира - иметь теги-утяжители, отдельно написанные на javascript, и вызывать те тесты из java/python, когда это требуется. То, что мы сейчас делаем!
Не могли бы вы привести пример того, как это сделать? – alannichols
Протранслятор - это библиотека JS, поэтому вы не можете запускать ее на Java и тестировать угловые приложения без использования Protractor сложно, потому что ваш тестовый код должен дождаться завершения угловых процессов до того, как возникнут взаимодействия, такие как щелчок.
К счастью, Angular упростил определение, когда это будет сделано.
Существует функция JS, которая выполняет обратный вызов и будет уведомлять вас, как только Угол будет готов.
angular.getTestability("body").whenStable(callback);
ПРИМЕЧАНИЕ: Это работает с угловым 1.4.8. Некоторые другие версии Angular имеют другой метод, похожий.
Вы можете вызвать метод тестирования из вашего тестового кода Java, используя следующий простой способ или что-то подобное.
private void waitForAngular() {
final String script = "var callback = arguments[arguments.length - 1];\n" +
"var rootSelector = \'body\';\n" +
"var el = document.querySelector(rootSelector);\n" +
"\n" +
"try {\n" +
" if (angular) {\n" +
" window.angular.getTestability(el).whenStable(callback);\n" +
" }\n" +
" else {\n" +
" callback();\n" +
" }\n" +
"} catch (err) {\n" +
" callback(err.message);\n" +
"}";
((JavascriptExecutor) driver).executeAsyncScript(script, new Object[0]);
}
Позвонить waitForAngular() перед тем, как взаимодействовать с драйвером с помощью метода, такого как щелчок.
Возможно, вам понадобится другой rootSelector из 'body', и вы можете захотеть выбросить ошибку, если угловой не существует, но это хорошо работает для моих нужд.
Транспортир предоставляет другие селектор, который может упростить тестирование углового приложения, но лично я использую селекторы идентификаторов и классов, поэтому мне они не нужны.
В Java уже есть библиотека для автоматизации Угловых материалов.Его построил на основе транспортир называется «ngWebDriver»
Отлично! Подписка на ngWebDriver в github. Любая идея, когда сторона Angular2 будет готова? – bobanahalf
@bobanahalf Я не инициировал никаких переговоров с владельцем репо Полом Хаммантом относительно поддержки Angular2. Но похоже, что он уже начал (Guessing) – Manoj
По состоянию на 2017 год, я нашел эти библиотеки транспортир для Java:
- jProtractor - Развитие несколько неактивны, но я испытал его на работу. Нажмите here для более подробной информации.
- ngWebDriver - Разработано Полом Хаммантом (соавтором Селена). В настоящее время активно развивается с хорошей документацией.
Код сниппета:
<input type="text" ng-model="startBalance" placeholder="Enter your current balance" class="ng-pristine ng-valid">
// jProtractor
WebElement startBalanceField = driver.findElement(NgBy.model("startBalance"));
// ngWebDriver
WebElement startBalanceField = driver.findElement(ByAngular.model("startBalance"));
Добро пожаловать на ТАК! Поскольку вы новичок в SO, вы можете прочитать следующие страницы справки: [«Как задать хороший вопрос?»] (Http://stackoverflow.com/help/how-to-ask) и ["How для создания минимального, полного и проверяемого примера "] (http://stackoverflow.com/help/mcve) – Jaap
Я уже читал them.thanks :) – user3762901